🌍 C++ Study/C++ 기초
C++ 범위기반 for문
맨텀
2024. 11. 9. 22:49
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; // 원본 값을 직접 변경
}