개발자 면접 공부/C-C++

C++ 17 구조적 바인딩

chogyujin 2023. 9. 14. 19:05
728x90

1. 개요

오늘은 C++의 구조적 바인딩에 대해 알아보겠습니다.


2. 구조적 바인딩?

구조적 바인딩은 C++ 17에 지원하는 기능으로 어떤 배열, STL 같은 컨테이너에서 멤버들을 쉽게 바인딩할 수 있도록 도와주는 문법이다.

아래의 예시를 보겠습니다.

 

#include<iostream>
#include<any>
#include<tuple>
#include<map>
using namespace std;

int main()
{
	map<int, int> m;
	for (int i = 1; i <= 10; i++)
		m[i] = i + i;

	for (map<int, int>::iterator iter = m.begin(); iter != m.end();iter++)
	{
		cout << iter->first << ' ' << iter->second<<'\n';
	}

	for(auto &i : m)
	{
		cout << i.first << ' ' << i.second << '\n';
	}

	for(auto &[k,v] : m)
	{
		cout << k << ' ' << v << '\n';
	}

	return 0;
}

구조적 바인딩을 이용하여 map 에 key와 value 를 꺼내오는 모습입니다.

 

다음은 array로 해보겠습니다.

#include<iostream>
#include<any>
#include<tuple>
#include<map>
#include<array>
using namespace std;

int main()
{
	array<int, 6> a;
	for (int i = 0; i < 6; i++)
		a[i] = i + i;
	auto [q, w, e, r, d, f] = a;
	cout << q << ' ' << w << ' ' << e << ' ' << r << ' ' << d << ' ' << f;
	
	return 0;
}

제대로 구조적 바인딩이 되는 모습입니다.

또한, tuple에서도 사용이 가능합니다.

#include<iostream>
#include<any>
#include<tuple>
#include<map>
#include<array>
using namespace std;

int main()
{
	tuple<int, int, int> t = make_tuple(1, 2, 3);
	auto [a, b, c] = t;
	cout << a << ' ' << b << ' ' << c;
	
	return 0;
}

그리고 auto 에 &참조를 붙이면 안에 값을 변경하면 원래 가지고있던 값도 변경됩니다.

#include<iostream>
#include<any>
#include<tuple>
#include<map>
#include<array>
using namespace std;

int main()
{
	tuple<int, int, int> t = make_tuple(1, 2, 3);
	auto& [a, b, c] = t;
	a = 2;
	b = 3;
	c = 4;
	cout << get<0>(t) << ' ' << get<1>(t) << ' ' << get<2>(t);
	
	return 0;
}

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

Inline 에 대하여  (2) 2023.09.25
C++ 17 variant  (0) 2023.09.19
C++ 11 tuple  (0) 2023.09.13
함수에 const 위치에 따른 결과  (0) 2023.09.09
가변길이 템플릿  (0) 2023.09.04