튜플 클래스tuple Class

고정 길이의 요소 시퀀스를 래핑합니다.Wraps a fixed-length sequence of elements.

구문Syntax

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
};

매개 변수Parameters

TNTN
N번째 튜플 요소의 형식입니다.The type of the Nth tuple element.

설명Remarks

클래스 템플릿은,, ... T1 T2 ,, TN 각각의 N 개 개체를 저장 하는 개체를 설명 0 <= N <= Nmax 합니다.The class template describes an object that stores N objects of types T1, T2, ..., TN, respectively, where 0 <= N <= Nmax. 튜플 인스턴스의 범위는 tuple<T1, T2, ..., TN> N 해당 템플릿 인수의 개수입니다.The extent of a tuple instance tuple<T1, T2, ..., TN> is the number N of its template arguments. 템플릿 인수 및 해당 형식의 저장 된 값의 인덱스는 Ti i - 1 입니다.The index of the template argument Ti and of the corresponding stored value of that type is i - 1. 따라서이 설명서에서 1에서 N 사이의 형식으로 숫자를 표시 하는 동안 해당 인덱스 값의 범위는 0에서 N-1 사이입니다.Thus, while we number the types from 1 to N in this documentation, the corresponding index values range from 0 to N - 1.

예제Example

// 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=

tuple 개체를 할당합니다.Assigns a tuple object.

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);

매개 변수Parameters

되지UN
N번째 복사된 튜플 요소의 형식입니다.The type of the Nth copied tuple element.

오른쪽right
복사할 튜플입니다.The tuple to copy from.

설명Remarks

처음 두 멤버 연산자는의 요소를의 해당 요소에 할당 합니다 *this .The first two member operators assign the elements of right to the corresponding elements of *this. 세 번째 멤버 연산자는 right.first 의 인덱스 0에 있는 요소 *this 와 인덱스 1의 요소에 할당 합니다 right.second .The third member operator assigns right.first to the element at index 0 of *this and right.second to the element at index 1. 세 개의 멤버 연산자는 모두 *this 를 반환 합니다.All three member operators return *this.

나머지 구성원 연산자도 앞의 연산자와 동일하지만 Rvalue 참조 선언자: &&를 사용합니다.The remaining member operators are analogs to earlier ones, but with Rvalue Reference Declarator: &&.

예제Example

// 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

두 튜플의 요소를 교환합니다.Exchanges the elements of two tuples.

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

매개 변수Parameters

비어left
튜플 오른쪽의 요소와 교환할 요소를 포함 하는 튜플입니다.A tuple whose elements are to be exchanged with those of the tuple right.

오른쪽right
요소를 왼쪽튜플의 요소와 교환 해야 하는 튜플입니다.A tuple whose elements are to be exchanged with those of the tuple left.

설명Remarks

함수는 left.swap(right)을 실행합니다.The function executes left.swap(right).

튜플이tuple

tuple 개체를 생성합니다.Constructs a tuple object.

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>&&);

매개 변수Parameters

되지UN
N번째 복사된 튜플 요소의 형식입니다.The type of the Nth copied tuple element.

오른쪽right
복사할 튜플입니다.The tuple to copy from.

설명Remarks

첫 번째 생성자는 요소가 기본 생성되는 개체를 생성합니다.The first constructor constructs an object whose elements are default constructed.

두 번째 생성자는 요소가 각 Pii - 1 인덱스의 요소를 초기화하여 P1, P2, ..., PN 인수에서 복사 생성되는 개체를 생성합니다.The second constructor constructs an object whose elements are copy constructed from the arguments P1, P2, ..., PN with each Pi initializing the element at index i - 1.

세 번째 및 네 번째 생성자는 해당 요소가 오른쪽의 해당 요소에서 복사 생성 되는 개체를 생성 합니다.The third and fourth constructors construct an object whose elements are copy constructed from the corresponding element of right.

다섯 번째 생성자는 인덱스 0의 요소가 right.first에서 복사 생성되고 인덱스 1의 요소가 right.second에서 복사 생성되는 개체를 생성합니다.The fifth constructor constructs an object whose element at index 0 is copy constructed from right.first and whose element at index 1 is copy constructed from right.second.

나머지 생성자도 앞의 생성자와 동일하지만 Rvalue 참조 선언자: &&를 사용합니다.The remaining constructors are analogs to earlier ones, but with Rvalue Reference Declarator: &&.

예제Example

// 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