C++

[C++] Auto, Pair, Tuple 자료형과 Range-based for

도리닥닥 2021. 12. 14. 17:30
728x90

 

auto

 

  • 컴파일러가 타입을 추론하여 타입을 결정
  • 변수의 타입을 명확하게 알 수 있어야 함.

 

-> 반드시 초기화가 필요

//////////////////////////////// << (ERROR)
auto a, b;  // <- init X
cin >> a >> b;
cout << a << b << '\n';
//////////////////////////////// << (CORRECT)
auto a = 0, b = 0; // <- init
cin >> a >> b;
cout << a+b << '\n';

 

Range-based for

 

  • 배열의 모든 요소를 검색.
  • for ( 배열의 요소 값 : 배열 주소) { }
int a[] = {1,2,3,4,5};
for(int x : a) {
	cout << x << ',';
    }
cout << '\n';

 

result : 1,2,3,4,5,

 

pair

  • 두 자료형을 묶을 수 있다. (항상 2개)
  • 첫 번째 자료는 first, 두 번째 자료는 second 로 접근.
  • make_pair를 이용하거나, 생성자를 이용해서 만들 수 있음.
  • #include<utility>에 있으나 algorithm, vector와 같은 헤더파일에서 이미 포함하고 있기에
  •    별도로 include 하는 일은 드뭄.
pair<int, int> p1;

p1 = make_pair(10,20);

p1 - pair<int, int>(30, 40);

pair<int, int> p2(50, 60);

 

tuple

  • pair와 같지만 여러 개를 묶을 수 있다.
  • get을 이용하여 index로 접근.
  • get의 index를 변수 형태로 처리 할 수 없음.

 

tuple<int, int, int> t1 = make_tuple(1,2,3);

cout << get<0>(t1) << ' ';
cout << get<1>(t1) << ' ';
cout << get<2>(t1) << '\n';

////////////////////////////////////// <- get의 index를 변수 형태로 처리할수 없음.
for(int i = 0; i < 3; i++) {
	cout << get<i>(t1) << '\n';
    }