본문 바로가기

Study/C++

C++ 반복문을 이용해서 코드 줄이기

코드 개선 실화냐? 진짜 코딩 최강자들의 싸움이다.. 내가 알던 C++이 맞나? 진짜 range-based for loop는 전설이다.. C++ 11부터 가슴이 웅장해진다

 

 

개요


next라는 변수의 값만 바뀌고, 나머지는 동일한 내용이 반복되는 코드였다.

next = {cur+1, cur-1, cur+cur}로 선언하여 간결하게 코드를 작성할 수 있다.

 

 

예시


기존 코드

while(!q.empty()){
    int cur = q.front();
    q.pop();
    int next = cur+1;
    if(next <= k){
        if(dist[next]==-1){
            q.push(next);
            dist[next] = dist[cur]+1;
        }
    }
    next = cur-1;
    if(next >=0){
        if(dist[next]==-1){
            q.push(next);
            dist[next] = dist[cur]+1;
        }
    }
    next = cur+cur;
    if(next < MAX){
        if(dist[next]==-1){
            q.push(next);
            dist[next] = dist[cur]+1;
        }
    }
}

 

개선한 코드

while(!q.empty()){
        int cur = q.front();
        q.pop();
        //방문할 노드를 for문에 선언한다
        for(int next : {cur-1, cur+1, cur+cur}){
            if(next > MAX || next < 0) continue;
            if(dist[next]==-1){
                q.push(next);
                dist[next] = dist[cur]+1;
                cnt[next] = cnt[cur];
            }
        }
    }