C++STL과 알고리즘

반복자 기본

STL 컨테이너와 알고리즘을 이어 주는 반복자(iterator)의 역할과 begin/end 규칙을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

cpp
auto it = values.begin();
if (it != values.end()) {
    std::cout << *it << "\n";
}

설명

  • 반복자는 컨테이너 원소를 가리키는 일반화된 "위치" 개념으로, STL 알고리즘이 컨테이너 종류와 무관하게 동작하게 해 줍니다.
  • begin()은 첫 원소 위치, end()는 마지막 원소 다음 위치를 뜻하므로, 순회 범위는 보통 [begin, end) 반열림 구간으로 이해합니다.
  • 값에 접근할 때는 *it, 다음 위치로 이동할 때는 ++it를 사용합니다.
  • std::sort, std::find, std::accumulate 같은 알고리즘이 반복자 쌍을 받는 이유는 컨테이너가 아니라 "범위"를 추상화하기 위해서입니다.
  • 벡터 삽입/삭제 후 반복자가 무효화될 수 있다는 점까지 알아 두면, STL 버그의 큰 부분을 더 빨리 이해할 수 있습니다.

짧은 예제

cpp
#include <iostream>
#include <vector>

int main() {
    std::vector<int> values{10, 20, 30};

    for (auto it = values.begin(); it != values.end(); ++it) {
        std::cout << *it << " ";
    }
}

빠른 정리

항목설명
begin()첫 원소를 가리키는 반복자
end()마지막 다음 위치를 가리키는 반복자
*it현재 원소 참조
++it다음 원소 위치로 이동
알고리즘 연결컨테이너와 STL 알고리즘을 이어 주는 핵심 추상화

주의할 점

end()는 실제 원소가 아니라 "끝 다음"을 뜻하므로 역참조하면 안 됩니다. it != end() 검사를 먼저 하는 습관이 중요합니다.