C++제어 흐름

범위 기반 for문

컨테이너 순회를 더 읽기 쉽게 만드는 range-based for와 값/참조 선택 기준을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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&가 더 적절한지 먼저 확인하는 습관이 좋습니다.