Aracılığıyla paylaş


tuple Sınıfı

Sabit uzunlukta bir öğe dizisini sarmalar.

Sözdizimi

class tuple {
   tuple();
   explicit tuple(P1, P2, ..., PN); // 0 < N
   tuple(const tuple&);
   template <class U1, class U2, ..., class UN>
      tuple(const tuple<U1, U2, ..., UN>&);
   template <class U1, class U2>
      tuple(const pair<U1, U2>&); // N == 2

   void swap(tuple& right);
   tuple& operator=(const tuple&);
   template <class U1, class U2, ..., class UN>
      tuple& operator=(const tuple<U1, U2, ..., UN>&);
   template <class U1, class U2>
      tuple& operator=(const pair<U1, U2>&); // N == 2
};

Parametreler

TN
N. tanımlama grubu öğesinin türü.

Açıklamalar

Sınıf şablonu, sırasıyla , ..., T2TN, türündeki T1N nesnelerini depolayan bir nesneyi açıklar. Burada 0 <= N <= Nmax. Tanımlama grubu örneğinin tuple<T1, T2, ..., TN> kapsamı, şablon bağımsız değişkenlerinin sayısıdır N . Şablon bağımsız değişkeninin Ti dizini ve bu türe karşılık gelen depolanmış değeridir i - 1. Bu nedenle, bu belgelerde türleri 1 ile N arasında saysak da, karşılık gelen dizin değerleri 0 ile N - 1 arasında değişir.

Örnek

// tuple.cpp
// compile with: /EHsc

#include <vector>
#include <iomanip>
#include <iostream>
#include <tuple>
#include <string>

using namespace std;

typedef tuple <int, double, string> ids;

void print_ids(const ids& i)
{
   cout << "( "
        << get<0>(i) << ", "
        << get<1>(i) << ", "
        << get<2>(i) << " )." << endl;
}

int main( )
{
   // Using the constructor to declare and initialize a tuple
   ids p1(10, 1.1e-2, "one");

   // Compare using the helper function to declare and initialize a tuple
   ids p2;
   p2 = make_tuple(10, 2.22e-1, "two");

   // Making a copy of a tuple
   ids p3(p1);

   cout.precision(3);
   cout << "The tuple p1 is: ( ";
   print_ids(p1);
   cout << "The tuple p2 is: ( ";
   print_ids(p2);
   cout << "The tuple p3 is: ( ";
   print_ids(p3);

   vector<ids> v;

   v.push_back(p1);
   v.push_back(p2);
   v.push_back(make_tuple(3, 3.3e-2, "three"));

   cout << "The tuples in the vector are" << endl;
   for(vector<ids>::const_iterator i = v.begin(); i != v.end(); ++i)
   {
      print_ids(*i);
   }
}
The tuple p1 is: ( 10, 0.011, one ).
The tuple p2 is: ( 10, 0.222, two ).
The tuple p3 is: ( 10, 0.011, one ).
The tuples in the vector are
( 10, 0.011, one ).
( 10, 0.222, two ).
( 3, 0.033, three ).

operator=

Bir tuple nesne atar.

tuple& operator=(const tuple& right);

template <class U1, class U2, ..., class UN>
   tuple& operator=(const tuple<U1, U2, ..., UN>& right);

template <class U1, class U2>
   tuple& operator=(const pair<U1, U2>& right); // N == 2

tuple& operator=(tuple&& right);

template <class U1, class U2>
   tuple& operator=(pair<U1, U2>&& right);

Parametreler

BM
Kopyalanan N. tanımlama grubu öğesinin türü.

Doğru
Kopyalanacak tanımlama grubu.

Açıklamalar

İlk iki üye işleç, sağ öğelerini öğesine karşılık gelen öğelerine *thisatar. Üçüncü üye işleci, 0 *this dizinindeki öğesine ve right.second dizin 1'deki öğesine atarright.first. Üç üye işleç de döndürür *this.

Geri kalan üye işleçleri öncekilere benzeticidir, ancak Rvalue Başvuru Bildirimcisi: &.

Örnek

// std__tuple__tuple_operator_as.cpp
// compile with: /EHsc
#include <tuple>
#include <iostream>
#include <utility>

typedef std::tuple<int, double, int, double> Mytuple;
int main()
    {
    Mytuple c0(0, 1, 2, 3);

// display contents " 0 1 2 3"
    std::cout << " " << std::get<0>(c0);
    std::cout << " " << std::get<1>(c0);
    std::cout << " " << std::get<2>(c0);
    std::cout << " " << std::get<3>(c0);
    std::cout << std::endl;

    Mytuple c1;
    c1 = c0;

// display contents " 0 1 2 3"
    std::cout << " " << std::get<0>(c1);
    std::cout << " " << std::get<1>(c1);
    std::cout << " " << std::get<2>(c1);
    std::cout << " " << std::get<3>(c1);
    std::cout << std::endl;

    std::tuple<char, int> c2;
    c2 = std::make_pair('x', 4);

// display contents " x 4"
    std::cout << " " << std::get<0>(c2);
    std::cout << " " << std::get<1>(c2);
    std::cout << std::endl;

    return (0);
}
0 1 2 3
0 1 2 3
x 4

swap

İki tanımlama grubunun öğelerini değiştirir.

template <class... Types>
   void swap(tuple<Types...&> left, tuple<Types...&> right);

Parametreler

Sol
Öğeleri, tanımlama grubu sağındaki öğelerle değiştirilecek bir tanımlama grubu.

Doğru
Öğeleri soldaki tanımlama grubuyla değiştirilecek bir tanımlama grubu.

Açıklamalar

işlevi yürütür left.swap(right).

tuple

Bir tuple nesne oluşturur.

constexpr tuple();
explicit constexpr tuple(const Types&...);
template <class... UTypes>
   explicit constexpr tuple(UTypes&&...);

tuple(const tuple&) = default;
tuple(tuple&&) = default;

template <class... UTypes>
   constexpr tuple(const tuple<UTypes...>&);
template <class... UTypes>
   constexpr tuple(tuple<UTypes...>&&);

// only if sizeof...(Types) == 2
template <class U1, class U2>
   constexpr tuple(const pair<U1, U2>&);
template <class U1, class U2>
   constexpr tuple(pair<U1, U2>&&);

Parametreler

BM
Kopyalanan N. tanımlama grubu öğesinin türü.

Doğru
Kopyalanacak tanımlama grubu.

Açıklamalar

İlk oluşturucu, öğeleri varsayılan olarak örülen bir nesne oluşturur.

İkinci oluşturucu, öğeleri , , P2... PN bağımsız değişkenlerinden P1kopyalanmış bir nesne oluşturur ve her Pi birinin öğesi dizininde i - 1başlatılır.

Üçüncü ve dördüncü oluşturucular, öğeleri sağın ilgili öğesinden kopyalanmış bir nesne oluşturur.

Beşinci oluşturucu, 0 dizinindeki öğesi öğesi öğesinden right.first oluşturulmuş ve dizin 1'deki öğesi öğesinden right.secondoluşturulmuş olan bir nesnesi oluşturur.

Kalan oluşturucular öncekilere benzeticidir, ancak Rvalue Başvuru Bildirimcisi: &.

Örnek

// std__tuple__tuple_tuple.cpp
// compile with: /EHsc
#include <tuple>
#include <iostream>
#include <utility>

typedef std::tuple<int, double, int, double> Mytuple;
int main()
{
    Mytuple c0(0, 1, 2, 3);

    // display contents "0 1 2 3"
    std::cout << std::get<0>(c0) << " ";
    std::cout << std::get<1>(c0) << " ";
    std::cout << std::get<2>(c0) << " ";
    std::cout << std::get<3>(c0);
    std::cout << std::endl;

    Mytuple c1;
    c1 = c0;

    // display contents "0 1 2 3"
    std::cout << std::get<0>(c1) << " ";
    std::cout << std::get<1>(c1) << " ";
    std::cout << std::get<2>(c1) << " ";
    std::cout << std::get<3>(c1);
    std::cout << std::endl;

    std::tuple<char, int> c2(std::make_pair('x', 4));

    // display contents "x 4"
    std::cout << std::get<0>(c2) << " ";
    std::cout << std::get<1>(c2);
    std::cout << std::endl;

    Mytuple c3(c0);

    // display contents "0 1 2 3"
    std::cout << std::get<0>(c3) << " ";
    std::cout << std::get<1>(c3) << " ";
    std::cout << std::get<2>(c3) << " ";
    std::cout << std::get<3>(c3);
    std::cout << std::endl;

    typedef std::tuple<int, float, int, float> Mytuple2;
    Mytuple c4(Mytuple2(4, 5, 6, 7));

    // display contents "4 5 6 7"
    std::cout << std::get<0>(c4) << " ";
    std::cout << std::get<1>(c4) << " ";
    std::cout << std::get<2>(c4) << " ";
    std::cout << std::get<3>(c4);
    std::cout << std::endl;

    return (0);
}
0 1 2 3
0 1 2 3
x 4
0 1 2 3
4 5 6 7