SW/C++

[ C++ ] tuple 개념 및 예제

얇은생각 2018. 11. 16. 12:55
반응형

tuple


튜플의 뜻을 아시나요? 튜플은 사물의 유한한 순서 뜻합니다. 튜플은 lisp, python, linda 등의 언어에서 이상의 순선대로 정렬된 서로 다른 값들의 모임을 정리할 이용합니다. 다른 객체 지향 언에서 사용되는 튜플을 C++11에서 채택하여 제공하는 것입니다.

 

std::typle<intcharstring> tupleValue(10,x,"string");
cs

 

튜플의 선언 방식은 위와 같습니다. tuple 키워드를 이용하여 꺽쇠 < > 안에 묶기 원하는 데이터 형을 나열합니다. 튜플은 함수에서 반환값이 이상일 경우 사용하면 효과적입니다. 이상의 반환값을 전달하기 위해 포인터나 참조를 이용하거나 구조체를 만들어 전달하는 불편함이 있었습니다. 튜플을 이용한다면 반환값을 몇개이던지 전달할 있습니다.

 


tuple 활용 사용하는 함수들


make_tuple 튜플을 만드는 함수

get 튜플로부터 값을 가져오는 함수

swap 튜플을 다른 튜플과 값을 바꾸는 함수

=연산자 튜플의 값을 다른 변수에 전달


auto typleValue = std::make_tuple(10'x'"string")
cs


make_tuple()함수는 튜플을 만들어 주는 함수입니다. auto 설정된 변수 tupleValue make_tuple 이용하여 초기화하면 tupleValue 데이터 타입이 튜플이 되는 것입니다. tuple 키워드로 선언한 것과 같은 값을 가지게 됩니다.


std:get<2>(tupleValue);
cs


get() 함수를 이용해 tupleValue 저장된 2 인덱스를 가진 "tuple string" 가져옵니다. 튜플은 배열과 마찬가지로 제일 처음의 값이 0 인덱스입니다.


std:swap(tup1, tup2);
cs


swap() 함수는 두개의 튜플의 값을 바꾸는 함수입니다. swap() 함수를 사용하기 위해서 개의 튜플이 서로 같은 형의 데이터를 같은 순서로 저장해야 합니다.


std::tie(x,y,z) = tupleValue;
cs


= 연산자를 이용하여 tuple 저장된 값을 각각 x, y, z 풀어서 넣어주어야 합니다. 이때 tie 키워드를 사용합니다. 이렇게 값을 따로 분류한 x, y, z에는 make_tuple() 생성한 값인 10, 'x', "string" 각각 저장됩니다.


#include <iostream>
#include <string>
#include <tuple>
using namespace std;
 
tuple<intstring> getAgeandName()
{
    int age;
    string name;
    cout << "나이를 입력하세요: ";
    cin >> age;
 
    cout << "이름을 입력하세요: ";
    cin >> name;
 
    return make_tuple(age, name);
}
 
int main()
{
    tuple<intstring> personInfo;
    personInfo = getAgeandName();
 
    cout << "나이: " << get<0>(personInfo) << endl;
    cout << "이름: " << get<1>(personInfo) << endl;
 
    return 0;
}
 
cs

 


위의 예제를 보면 tuple 이용하여 int string 함께 반환합니다. get함수를 이용하여 반환된 값을 출력하는 예제입니다. 만약 튜플이 없다면 두개의 값을 어떻게 반환해야 할까요? 아마 튜플보다 직관적이고 명료하게 프로그래밍은 없을 같습니다.


반응형

'SW > C++' 카테고리의 다른 글

[ C++ ] foward_list 개념 및 예제  (0) 2018.11.16
[ C++ ] array 개념 및 예제  (0) 2018.11.16
[ C++ ] 스마트 포인터 개념 및 예제  (0) 2018.11.16
[ C++ ] range base for 개념 및 예제  (0) 2018.11.16
[ C++ ] Lambda 개념 및 예제  (0) 2018.11.15