DNF LOVE

c++ 문법> 반복자 Iterator(Vector를 사용하여 예제) 본문

Programming/C++

c++ 문법> 반복자 Iterator(Vector를 사용하여 예제)

botho 2019. 10. 23. 17:51
반응형

C++에서는 반복자를 제공하는데, 이를 사용하면 컨테이너에 저장된 원소를 순회하고 접근하여 효과적으로 자료를 접근할 수 있다. 포인터와 비슷한 개념이지만 이는 컨테이너(Vector, dequeue, list, string 등)

이 반복자 덕분에 특정 컨테이너에 종속적이지 않게 언제든지 컨테이너와 결합하여 동작할 수 있다.

반복자는 * 연산자를 사용하여 컨테이너 내부의 원소를 가리키고 접근할 수 있어야 하며,

++, != == 등의 이항연산자를 사용하여 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다.


1. 선언

vector<int>::iterator iter; // vector 반복자 iter 선언

2. 초기화

	// vector 반복자 iter는 v의 시작점을 가리킴
	iter = v.begin();

3. 임의접근

cout << iter[1] << endl;

4. 연산 사용

iter += 5; // += 연산 사용
cout << *iter << endl;

5. vector의 순방향

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

** 양방향 반복자 : list, set, multiset, map, multimap

** 임의 접근 반복자(+, -, +=, -=, []연산 가능) : vector, deque

6. 전체 코드

#include "pch.h"
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
	vector<int> v;

	for (int i = 0; i < 7; i++) {
		v.push_back(10 * i);
	}

	vector<int>::iterator iter;
	// vector 반복자 iter는 v의 시작점을 가리킴
	iter = v.begin();

	cout << &iter << endl;
	cout << *iter << endl;
	// 임의 접근
	cout << iter[1] << endl;

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

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


	return 0;
}

여기서 유의해야할 점은, 임의 접근은 인덱스를 통해 접근하여 해당 값을 리턴하는 거지, iter가 가리키는 값을 바꾼다는 것은 아니다. 

접근하는 위치를 바꾸려면 이항연산을 사용하면 된다.

 

반응형