[cpp] iterator

minjubyeon·2025년 6월 14일

cpp

목록 보기
20/26

iterator"자료구조의 요소들을 하나씩 순차적으로 접근할 수 있게 해주는 객체형 포인터"입니다.


1. iterator

std::vector<int> v{10, 20, 30};

// 반복문을 iterator로 돌려보자
for (auto it = v.begin(); it != v.end(); ++it) {
    std::cout << *it << ' ';
}
// 출력: 10 20 30

v.begin()은 첫 번째 요소를 가리키는 iterator를 주고
v.end()는 마지막 요소의 "다음"을 가리켜 (그래서 포함 안 됨)
*it로는 그 위치의 값을 꺼낼 수 있어 (포인터 dereference처럼!)


✅ iterator의 장점

기능설명
범용성vector, list, set 등 거의 모든 컨테이너에서 사용 가능
편의성STL 알고리즘 (e.g., std::find, std::copy)과 함께 사용
안전성C-style 포인터보다 타입이 명확하고 실수 줄여줌

📦 iterator에서 사용할 수 있는 주요 연산자

연산자의미
*it현재 위치의 요소 값 (포인터 dereference와 같음)
++it다음 요소로 이동
it != end()끝에 도달했는지 검사

⚠️ 차이점 (배열 vs iterator)

int arr[] = {1, 2, 3};
for (int i = 0; i < 3; i++) std::cout << arr[i];  // 배열 인덱싱

std::vector<int> v{1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) std::cout << *it;  // iterator

🔚 결론

💡 iterator는 컨테이너 안의 데이터를 "포인터처럼" 순서대로 접근할 수 있게 해주는 객체야. begin()/end() 함수로 범위를 설정하고, *, ++, != 등의 연산자를 활용해서 데이터를 순회할 수 있어.

📌 슬라이드 참고:

  • [12. STL] 슬라이드 400~405 (Iterators)
  • [vector, list, set 등 begin()/end() 함수 사용 예시 있음】



2. 📦 다양한 반복 방식

🔁 일반 반복

for (auto it = vec.begin(); it != vec.end(); ++it)
    std::cout << *it << ' ';

🔁 역방향 반복 (슬라이드 404)

for (auto it = std::rbegin(vec); it != std::rend(vec); ++it)
    std::cout << *it << ' ';

🔁 std::begin, std::end 사용 (슬라이드 402)

int arr[] = {1, 2, 3};
for (auto it = std::begin(arr); it != std::end(arr); ++it)
    std::cout << *it << ' ';

profile
안녕하세요.

0개의 댓글