C++ Chapter 19.2 : 튜플(Tuple)로 함수에서 여러개 리턴값 반환하기
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀  
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 19. 모던 C++ 필수 요소들
Tuple
#include <tuple>
리턴 타입을 튜플로 하면 여러개의 값을 한번에 리턴받을 수 있다.
🔔 튜플(Tuple)을 사용하는 고전적인 방법
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, int> my_func()
{ 
	return tuple<int, int>(123, 456); 
}
int main()
{
	tuple<int, int> result = my_func();
	cout << get<0>(result) << " " << get<1>(result) << endl;
}
- tuple<int, int> my_func()함수- 매개변수가 없으며
- int 데이터 2 개를 담는 튜플을 리턴한다.
        - return tuple<int, int>(123, 456)
            - 123, 456 데이터 2개를 담고 있는 튜플을 리턴
 
 
- return tuple<int, int>(123, 456)
            
 
- tuple<int, int> result = my_func();- result에 my_func 함수의 리턴 값인 [123, 456] 튜플이 담긴다.
 
std::get
get<n>(tuple)👉 해당 튜플의 데이터들 中n번째 원소를 리턴하는 함수이다.
- std::get<0>(result)- 튜플 result의 0 번째 원소 리턴- 123
 
 
- 튜플 
- std::get<1>(result)- 튜플 result의 1 번째 원소 리턴- 456
 
 
- 튜플 
고전적인 방법의 불편한 점
tuple의 size를 더 늘리려면 함수의 리턴 결과를 <int,int,int> (123,456,789)  이렇게 늘려서 바꿔야 하고 또 get<2>(result) 실행도 추가해야한다. 불편함!
🔔 튜플(Tuple)을 사용하는 편리한 방법 in C++ 17
현대적인 튜플 사용 방법
C++ 17 에서만 가능
#include <iostream>
#include <tuple>
using namespace std;
auto my_func()
{ 
	return tuple(123, 456, 789);
}
int main()
{
	auto [a, b, c] = func();
	cout << a << " " << b << " " << c << "\n";
}
- return tuple(123, 456, 789)- 데이터를 추가하고 싶으면 그냥 (123, 456, 789, 01010) 뒤에 추가해주면 끝
- <int, int, int>이런식으로 데이터 타입을 적어줄 필요도 없다.
- C++17 에서만 가능
 
- auto [a, b, c] = func();- func()의 리턴값인 튜플의 3개 원소들을 각각 a, b, c 에 대입한다.
- a에 첫번째 원소가 대입되고- b에 두번째 원소가 대입되고- c에 세번째 원소가 대입된다.
 
- cout << a << " " << b << " " << c- get 함수를 쓸 필요없이 바로 abc로 원소에 접근 가능해진다.
 
- get 함수를 쓸 필요없이 바로 
- 네 개 원소를 가진 튜플을 리턴한다면 [a, b, c, d]로만 바꿔주면 될 뿐이라 편리하다!
    - C++17 에서만 가능
        - 파이썬과 비슷해짐
 
 
- C++17 에서만 가능
        
C++ 17 사용하는 방법
비주얼스튜디오 👉 프로젝트 👉 우클 👉 속성 👉 C/C++ 👉 언어 👉 C++언어 표준 👉 C++17 standard 선택
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
 
      
    
댓글 남기기