기본 패턴
cpp
for (const auto& value : values) {
std::cout << value << "\n";
}설명
- 범위 기반 for문은
begin()과end()를 제공하는 대상의 원소를 간결하게 순회하는 문법입니다. - 인덱스가 필요 없는 순회에서 특히 읽기 좋아지며, "무엇을 돈다"는 의도가 코드 첫 줄에서 바로 드러납니다.
auto value는 원소를 복사하고,auto& value는 원본을 수정할 수 있는 참조를,const auto& value는 복사 없이 읽기 전용 참조를 뜻합니다.- 문자열, 배열, vector, map 같은 표준 컨테이너는 물론 사용자 정의 타입도 반복자 규칙을 맞추면 사용할 수 있습니다.
- 간결하다고 해서 무조건 쓰는 것은 아니고, 인덱스가 의미를 가지는 알고리즘이나 병렬 순회에서는 전통적인 for문이 더 적합할 수도 있습니다.
짧은 예제
cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{80, 90, 100};
for (int& score : scores) {
score += 5;
}
for (const auto& score : scores) {
std::cout << score << " ";
}
}빠른 정리
| 항목 | 설명 |
|---|---|
for (auto x : c) | 원소를 값으로 복사 |
for (auto& x : c) | 원소를 참조로 받아 수정 가능 |
for (const auto& x : c) | 복사 없이 읽기만 수행 |
| 장점 | 인덱스보다 "순회 의도"가 더 잘 보임 |
| 주의점 | 값 복사가 숨어 있을 수 있으므로 선언 형태 확인이 중요 |
주의할 점
큰 객체 컨테이너를 auto value로 순회하면 매 반복마다 복사가 일어날 수 있습니다. 읽기만 하는 경우라도 const auto&가 더 적절한지 먼저 확인하는 습관이 좋습니다.