2023. 7. 7. 13:19, 알고리즘/BOJ
2250번 문제를 풀다가, 참고 코드를 보던중에
int n;
int lc[10'005];
int rc[10'005];
int colno,root;
pair<int,int> colLR[10'005];
void inorder(int cur, int d){
if(cur=-1) return; /*애초에 배열로 받을때 -1까지 받아서 이런식으로
코드를 작성한 것이다.*/
inorder(lc[cur],d+1);
colno++;
auto &[lcol, rcol] = colLR[d];
if(!lcol || colno<lcol) lcol=colno;
if(!rcol || rcol<colno) rcol=colno;
inorder(rc[cur],d+1);
}
형태로 작성된 부분을 보았는데, 이때에 지금까지 auto [lcol, rcol] =colLR[d];
처럼 구조화된 바인딩(structed binding - c++17 부터 사용 가능)을 사용하는 형태는 많이 보았으나, 그게 아니라
바로 구조화된 바인딩을 사용해서 코드를 작성할때, &을 같이 붙여 넣어서
auto &[lcol, rcol] =colLR[d]; 형태로 코드를 작성하는걸 보게 되었다.
아무래도 &를 붙여넣는것을 보니, 값을 복사하는것이 아닌 참조로 가져와서 메모리에 복사된 값들을 쌓지 않는다던지,
혹은 colLR[d] 값 자체를 변경시킨다던지 하는 형태를 생각해 볼 수 있었는데, 이에 대해서 한번 검색해보았다.

이와 같은 정보를 얻을 수 있었다.
지금까지는 대부분 그냥 값 자체를 복사하여서 사용하여도 문제가 없었는데,
이 풀이처럼 구조화된 바인딩(structed binding)에다가 &을 붙여서 바로 참조형태로 값을 가져다 쓸 수 있다는 것을 알아두고,
필요한 경우에는 이렇듯 &(앰퍼샌드) 을 붙여서 사용하도록 코드를 작성해보자.
'알고리즘 > BOJ' 카테고리의 다른 글
플로이드 알고리즘을 활용한 풀이에서 거리를 무한대의 의미로 놓기 위해 사용하는 0x3f3f3f3f와 0x7fffffff에 대하여. (0) | 2023.07.16 |
---|---|
boj 16486번 문제를 통해서 보는 c++에서의 소수점 몇번째 자리 자리수와 fixed와 precision(); (0) | 2023.07.14 |
boj 20955번 문제에 대한 풀이중, dfs와 사이클 감지를 이용하는 코드 작성하기. (0) | 2023.07.05 |
boj 4803번 문제에서 메모리 초과에 관하여. 그리고 내 맥북에서 segmentation falut (0) | 2023.07.04 |
식에 개체 포인터 형식이 있어야 하는데 "int" 형식이 있음. 이라는 오류에 관하여. (0) | 2023.07.03 |
Comments, Trackbacks