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처럼!)
| 기능 | 설명 |
|---|---|
| 범용성 | vector, list, set 등 거의 모든 컨테이너에서 사용 가능 |
| 편의성 | STL 알고리즘 (e.g., std::find, std::copy)과 함께 사용 |
| 안전성 | C-style 포인터보다 타입이 명확하고 실수 줄여줌 |
| 연산자 | 의미 |
|---|---|
*it | 현재 위치의 요소 값 (포인터 dereference와 같음) |
++it | 다음 요소로 이동 |
it != end() | 끝에 도달했는지 검사 |
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() 함수로 범위를 설정하고, *, ++, != 등의 연산자를 활용해서 데이터를 순회할 수 있어.
📌 슬라이드 참고:
for (auto it = vec.begin(); it != vec.end(); ++it)
std::cout << *it << ' ';
for (auto it = std::rbegin(vec); it != std::rend(vec); ++it)
std::cout << *it << ' ';
int arr[] = {1, 2, 3};
for (auto it = std::begin(arr); it != std::end(arr); ++it)
std::cout << *it << ' ';