반복자(iterator) 에 대한 정리이다.
반복자는 컨테이너의 요소를 가리키는 객체이다. 포인터와 비슷한 개념이지만 일반화된 포인터라고 보면 될 것 같다. 이 반복자를 통해 컨테이너의 요소에 쉽게 접근할 수 있다.
그러니까 쉽게 말하자면 컨테이너는 여러 종류이지만 각 컨테이너들의 자료 구조나 코드적인 구조를 생각하지 않더라도 컨테이너의 요소들에 쉽게 접근할 수 있도록 만들어진 인터페이스와 같다.
나는 이 반복자가 따로 클래스 정의되어 있는 것인줄 알았다. 그런 것이 아니고 보니까 각각 컨테이너마다 반복자가 들어있던 것이다.
사용법은 정말 간단한 코드로 정리를 해놓는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
int max_number = 0;
int val = 0;
vector<int> num_vector;
vector<int>::iterator it; // 반복자를 선언한다.
while (true)
{
cout << "벡터에 추가할 숫자를 입력하세요 (-123123 입력 시 종료) : ";
cin >> val;
if (val == -123123)
break;
else
num_vector.push_back(val);
}
max_number = num_vector[0];
for (it=num_vector.begin() ; it<num_vector.end(); it++)
{
if (*it > max_number)
max_number = *it;
}
cout << " 입력한 값 중에서 최대 값은 " << max_number << " 입니다." << endl;
return 0;
}
|
cs |
이전 코드와 다른 점은 컨테이너의 요소 순회를 정수 인덱스(i)가 아닌 반복자를 통해서 순회한다는 점인데, 9번 라인에서 벡터 콘테이너 클래스 템플릿 내에 존재하는 iterator를 선언하고, 21번 라인에서 선언한 반복자를 이용해서 시작과 끝을 설정하는 부분이다.
위의 21번 라인에 있는 begin과 end 멤버는 어떤 반환을 하길래 저렇게 사용할까? 라는 생각에 벡터 컨테이너 클래스 내에서 begin과 end 멤버 함수의 정의를 확인해 보았는데, 친절하게도 아래와 같이 주석이 달려있다.
반환형이 시퀀스의 시작을 위한 iterator 형태와 끝 iterator 형태를 반환하기 때문에 코드에서 선언한 반복자로 이를 반환 받은 후 범위에 대한 접근 처리를 진행할 수 있었던 것이다.
23, 24 라인과 같이 접근할 때에는 포인터를 사용하는 듯이 오버로딩된 연산자 * 을 통해서 진행된다.
'프로그래밍응용 > Modern & STL' 카테고리의 다른 글
Deque (0) | 2020.09.13 |
---|---|
모든 컨테이너 공통 멤버 (0) | 2020.09.13 |
Vector (0) | 2020.09.12 |
STL:Container, Iterator, Algorithm 개념 (0) | 2020.09.10 |
C++ STL(Standard Template Library이란? (0) | 2020.09.07 |