boj 2250번 문제를 통해 접하게된 구조화된 바인딩(structed binding)과 &을 이용한 참조.

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)에다가 &을 붙여서 바로 참조형태로 값을 가져다 쓸 수 있다는 것을 알아두고,

필요한 경우에는 이렇듯 &(앰퍼샌드) 을 붙여서 사용하도록 코드를 작성해보자. 

 

  Comments,     Trackbacks