2024
11.09

 

C++ 11 에서 추가된 범위 기반 for 문이다.

오히려 std::for_each 보다도 훨씬 더 C#의 foreach와 비슷하다.

 

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    for (int num : numbers) {
        std::cout << num << ' ';
    }

    return 0;
}

 

타입은 auto를 쓰는 경우도 있다. 그렇지만 auto는 이터레이터가 아니고서야 가급적 안쓰는 걸 추천.

auto는 기본적으로 값 타입으로 추론되기 대문에, 참조나 포인터로 사용하려면 반드시 &나 *를 명시하자.

 

단. 사용 의도에 따라 주의해야 할 점이 몇개있다.

기본적으로 for는 복사해 요소를 가져온다는 점에 주의하자.

 

1. 수정없이 보기만 하는 경우 

- const를 붙여 수정하지 않을 것을 명시적으로 표기하자.

for (const int& num : numbers) {
    std::cout << num << ' ';
}

 

2. 값을 수정해야하는 경우

- &를 붙여서 참조기반으로 순회하도록 하자.

std::vector<int> numbers = {1, 2, 3, 4, 5};

for (int& num : numbers) {  // 참조로 순회
    num *= 2;  // 각 요소를 2배로 변경
}

 

 

물론 이는 일반 for문에도 적용되는 문제이다.

for (int i = 0; i < numbers.size(); ++i) {
    int& num = numbers[i];  // 참조 사용
    num *= 2;  // 원본 값을 직접 변경
}

 

 

COMMENT