tuple
튜플의 뜻을 아시나요? 튜플은 사물의 유한한 순서를 뜻합니다. 튜플은 lisp, python, linda 등의 언어에서 두 개 이상의 순선대로 정렬된 서로 다른 값들의 모임을 정리할 때 이용합니다. 다른 객체 지향 언에서 사용되는 튜플을 C++11에서 채택하여 제공하는 것입니다.
std::typle<int, char, string> 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<int, string> getAgeandName() { int age; string name; cout << "나이를 입력하세요: "; cin >> age; cout << "이름을 입력하세요: "; cin >> name; return make_tuple(age, name); } int main() { tuple<int, string> 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 |