공부/c++

C++ Iterator

명석 2024. 7. 25. 15:09

개요

Iterator는 C++에서 컨테이너(예: vector, list, set 등)의 요소를 순차적으로 접근할 수 있도록 도와주는 객체입니다. 포인터와 유사한 역할을 하며, 컨테이너의 시작 요소와 끝 요소를 가리킬 수 있습니다. Iterator를 사용하면 컨테이너의 요소를 효율적으로 순회하고 조작할 수 있습니다.


주요 기능 및 사용 방법

  1. 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;
    }
  2. 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;
    }
  3. 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;
    }
  4. 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;
    }
  5. 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;
    }
  6. 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++ 프로그래밍에서 중요한 기술입니다.