C++ Chapter 19.2 : 튜플(Tuple)로 함수에서 여러개 리턴값 반환하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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개를 담고 있는 튜플을 리턴
  • 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 로 원소에 접근 가능해진다.
  • 네 개 원소를 가진 튜플을 리턴한다면 [a, b, c, d]로만 바꿔주면 될 뿐이라 편리하다!
    • C++17 에서만 가능
      • 파이썬과 비슷해짐

C++ 17 사용하는 방법

비주얼스튜디오 👉 프로젝트 👉 우클 👉 속성 👉 C/C++ 👉 언어 👉 C++언어 표준 👉 C++17 standard 선택



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기