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 |