공부/c++
C++ Iterator
명석
2024. 7. 25. 15:09
개요
Iterator는 C++에서 컨테이너(예: vector, list, set 등)의 요소를 순차적으로 접근할 수 있도록 도와주는 객체입니다. 포인터와 유사한 역할을 하며, 컨테이너의 시작 요소와 끝 요소를 가리킬 수 있습니다. Iterator를 사용하면 컨테이너의 요소를 효율적으로 순회하고 조작할 수 있습니다.
주요 기능 및 사용 방법
- Iterator 선언 및 초기화
Iterator는 컨테이너 타입에 따라 선언됩니다. 예를 들어, vector의 iterator는 vector<int>::iterator로 선언합니다.#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; vector<int>::iterator it; // vector<int>의 iterator 선언 // Iterator 초기화 it = v.begin(); // v의 시작 요소를 가리킴 cout << "첫 번째 요소: " << *it << endl; // Dereferencing하여 요소 접근 return 0; }
- Iterator 이동 및 접근
Iterator는 증가(++)와 감소(--) 연산을 통해 이동할 수 있습니다. Dereferencing(*) 연산을 통해 현재 위치의 요소에 접근합니다.
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; vector<int>::iterator it; for (it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 현재 요소 출력 } return 0; }
- Iterator와 const Iterator
const_iterator는 요소를 변경할 수 없는 상수 iterator입니다. 읽기 전용으로 사용됩니다.
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; vector<int>::const_iterator cit; for (cit = v.cbegin(); cit != v.cend(); ++cit) { cout << *cit << " "; // 요소 출력 (읽기 전용) } return 0; }
- Iterator를 이용한 삽입 및 삭제
Iterator를 사용하여 컨테이너의 특정 위치에 요소를 삽입하거나 삭제할 수 있습니다.
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; vector<int>::iterator it = v.begin() + 2; // 세 번째 요소를 가리킴 // 요소 삽입 v.insert(it, 10); // 세 번째 위치에 10 삽입 for (it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 출력: 1 2 10 3 4 5 } cout << endl; // 요소 삭제 it = v.begin() + 2; v.erase(it); // 세 번째 요소 삭제 for (it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 출력: 1 2 3 4 5 } return 0; }
- Iterator와 알고리즘
algorithm 헤더의 다양한 알고리즘 함수와 함께 Iterator를 사용할 수 있습니다. 예를 들어, sort, find, copy 등이 있습니다.
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {5, 3, 1, 4, 2}; sort(v.begin(), v.end()); // 오름차순 정렬 for (auto it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 출력: 1 2 3 4 5 } return 0; }
- Reverse Iterator
Reverse Iterator는 컨테이너의 요소를 역순으로 순회합니다. rbegin()과 rend() 메서드를 사용하여 시작과 끝을 설정합니다.
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; vector<int>::reverse_iterator rit; for (rit = v.rbegin(); rit != v.rend(); ++rit) { cout << *rit << " "; // 출력: 5 4 3 2 1 } return 0; }
요약
Iterator는 C++에서 컨테이너의 요소를 순회하고 조작하는 데 매우 유용한 도구입니다. 포인터와 유사하지만 더 안전하고 유연한 방법으로 요소에 접근할 수 있게 해줍니다. 다양한 타입의 iterator를 이해하고 사용하는 것은 C++ 프로그래밍에서 중요한 기술입니다.