[STL] 반복자 iterator 개념 및 예제

2019. 7. 30. 00:16 기타/C++ STL

[STL] 반복자 iterator 개념 및 예제


반복자는 컨테이너에 저장된 원소를 순회하고 접근하는 일반화된 방법을 제공한다.

반복자는 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할을 한다.


이 반복자 덕에 알고리즘은 특정 컨테이너에 종속적이지 않고 독립적이면서도 언제든지 컨테이너와 결합하여 동작할 수 있다.


- 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 한다. (* 연산자)

- 반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다. (++, !=, == 연산자 제공)


순차열은 하나의 시작과 하나의 끝을 갖는다. 여기서 반복자는 순차열의 한 원소를 가리킨다.

순차열의 시작은 begin() 끝은 end() 이며, end()는 실제 원소의 끝이 아닌 끝을 표시하는 원소이다.


반 개구간 [begin, end)

(반복자(iterator)의 구간은 [begin, iter) , [iter, end) 가 된다.)


vector<int> 반복자(iterator)는 다음과 같이 선언한다.


vector<int>::iterator iter;



* Vector 의 반복자(iterator) 사용


#include <iostream>
#include <vector>
using namespace std;


int main(){

    vector<int> v;

    v.push_back(10);
    v.push_back(20);
    v.push_back(30); 
    v.push_back(40);
    v.push_back(50);

    vector<int>::iterator iter=v.begin();  // 벡터 반복자 시작지점

    cout << iter[3] << endl;  // 임의접근

    iter += 2;  // += 연산
    cout << *iter << endl;
    cout << endl;


    // 반복
    for (iter = v.begin(); iter != v.end(); ++iter){
        cout << *iter << endl;
    }

    return 0;
}


결과 :

40

30


10

20

30

40

50


- v.begin() : 컨테이너의 시작 원소를 가리키는 반복자를 반환한다.

- v.end() : 컨테이너의 끝 표시 반복자를 반환한다.

- ++iter : 반복자를 다음 원소를 가리키도록 이동한다.

- *iter : iter 가 가리키는 원소(객체)를 반환한다.

- iter[3] : iter+3번째 원소(객체)를 반환한다.

- iter+=2 : 현재 iter 위치에서 2개 뒤의 원소(객체)로 접근한다.



* 반복자의 범주


- 입력 반복자(input iterator) :  현 위치의 원소를 한 번만 읽을 수 있는 반복자  (istream)

- 출력 반복자(output iterator) : 현 위치의 원소를 한 번만 쓸 수 있는 반복자 (ostream)

- 순방향 반복자(forward iterator) : 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재할당될 수 있는 반복자

- 양방향 반복자(bidirectional iterator) : 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자 

  ( list, set, mulitset, map, multimap)

- 임의 접근 반복자(random access iterator) : 양방향 반복자 기능에 +, -, += , -=, [] 연산이 가능한 반복자

  (vector, deque)


모든 컨테이너는 양방향 반복자 이상을 제공한다.

배열 기반 컨테이너인 vector와 deque는 임의 접근 반복자를 제공한다.



출처: https://hyeonstorage.tistory.com/318?category=614599 [개발이 하고 싶어요]

'기타 > C++ STL' 카테고리의 다른 글

[STL] deque 정리 및 예제  (0) 2019.07.30
[STL] vector 벡터 정리 및 예제  (0) 2019.07.30
[STL] not2 함수  (0) 2019.07.30
[STL] 역방향 반복자 (reverse_iterator)  (1) 2019.07.30
[STL] 스택(stack) 기본 예제  (0) 2019.07.30
[STL] sort() 정렬 예제  (0) 2019.07.30
[STL] find() 함수 예제  (0) 2019.07.30
[STL] less, greater, plus, minus 예제  (0) 2019.07.30