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 함수를 쓸 필요없이 바로
a
b
c
로 원소에 접근 가능해진다.
- get 함수를 쓸 필요없이 바로
- 네 개 원소를 가진 튜플을 리턴한다면 [a, b, c, d]로만 바꿔주면 될 뿐이라 편리하다!
- C++17 에서만 가능
- 파이썬과 비슷해짐
- C++17 에서만 가능
C++ 17 사용하는 방법
비주얼스튜디오 👉 프로젝트 👉 우클 👉 속성 👉 C/C++ 👉 언어 👉 C++언어 표준 👉 C++17 standard 선택
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기