[STL] 반복자 Iterator

반복자

컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할

 

반복자의 특징
  1. 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 한다.(*연산자 제공)
  2. 반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다.(++ 연산자 제공, !=, == 비교연산자 제공)

 

컨테이너 원소(객체)의 집합 = 순차열(sequence)

순차열은 원소의 순서 있는 집합, 하나의 시작과 하나의 끝을 같는다. = 투 포인터를 갖는다.

STL은 시작과 끝을 가리키는 begin( ) 과 end( )가 순차열의 시작과 끝을 가리키는 반복자를 반환한다.

 

#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);

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}
	
	vector<int>::iterator iter;
	for (iter = v.begin(); iter != v.end(); iter++) {
		cout << *iter << endl;
	}
	
	return 0;
}

 

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

- v.end() : 컨테이너의 끝 원소를 가리키는 반복자를 반환

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

 - *iter : iter가 가리키는 원소를 반환(역참조)

 


 

Deque의 임의 접근 반복자

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

int main() {

	deque<int> dq;
	dq.push_back(10);
	dq.push_back(20);
	dq.push_back(30);
	dq.push_back(40);
	dq.push_back(50);

	deque<int>::iterator iter = dq.begin(); //시작 반복자로 iter설정

	cout << iter[0] << endl;
	cout << iter[1] << endl;
	cout << iter[2] << endl;
	cout << iter[3] << endl;
	cout << iter[4] << endl;

	iter += 2; //반복자를 2칸 이동
	cout << *iter << endl;
	cout << endl;

	deque<int>::iterator iter2 = iter+2; //2칸 이동되어있는 iter반복자에 2칸 이동시킨 위치의 반복자 선언
	cout << *iter2 << endl;

	return 0;
}

 

Deque는 First-In-First-Out 구조로 Vector와 같은 배열 기반 컨테이너로 똑같이 동작합니다.

 

- iter[i]: iter+i 원소에 접근

- iter += n : iter를 n만큼 이동

- iter2 = iter + n : iter위치에 +n한 위치의 반복자를 iter2에 대입합니다.

 

처음 iter는 deque의 begin() 위치를 가리키고 있고 iter += 2로 2번 이동한 위치를 가리키게 합니다.

그럼 처음 출력은 10에서 2번 이동한 30을 출력합니다.

 

iter2 에는 iter의 2번이동한 위치를 가리키게 하므로 30에서 2번 이동한 50을 출력합니다.

 

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

[STL] 어댑터  (0) 2025.03.03
[STL] 알고리즘 Algorithm  (0) 2025.03.03
[STL] 컨테이너 ( container )  (0) 2025.03.01
[STL] STL 시작  (1) 2025.03.01
[STL] 4장 문제풀이  (0) 2025.02.21