[STL] 반복자 iterator 개념 및 예제
[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 |