ㅇ 반복자
STL의 가장 핵심적인 요소 ==> 반복자
포인터와 하는 역할이나 사용방법이 비슷하되 훨씬 더 일반화되어 있어 임의의 컨테이너와 함께 사용가능
STL의 일반성은 반복자를 통해 확보된다.
배열과 연결 리스트는 논리적으로 유사한 컨테이너이나 물리적인 자료 구조가 틀리므로 순회하는 방법이 다르다.
순회 방법을 일반화 하기 위해 STL에서 사용하는 개념이 반복자이다.
어떤 경우는 포인터가 되고, 어떤 경우는 첨자가 되고 어떤 경우는 복잡한 객체가 요구되기도 한다.
반복자는 다음과 같은 기능을 지닌다.(종류에 따라 일부 제외되기도 함)
① 컨테이너의 요소 하나를 가리키는 기본적인 역할
② 가리키는 지점의 요소를 읽고 쓸 수 있다. 내용을 읽는 * 연산자가 정의.
③ 증감에 의해 주변 요소로 이동할 수 있다. ++, -- 등의 연산자가 정의
④ 반복자끼리 대입, 비교 가능해야 한다. 대입, 비교 연산자가 정의
모든 컨테이너는 시작점과 끝 다음점을 조사하는 begin, end 멤버 함수를 제공
반복자와 컨테이너의 begin, end함수를 사용하면 모든 컨테이너를 동일한 방법으로 순회 할수있다.
예제 : itervector
1 #include <stdio.h>
2 #include <vector>
3 using namespace std;
4
5
6 void main()
7 {
8 int ari[] = { 1, 2, 3, 4, 5};
9 vector<int>vi(&ari[0], &ari[5]);
10
11 vector<int>::iterator it; /// 반복자
12 for ( it = vi.begin(); it != vi.end(); it++)
13 {
14 printf("%d\n", *it);
15 }
16 }
벡터의 한 요소를 가리키는 반복자는 다음과 같이 선언한다.
vector<T>::iterator it;
vector<T> : 클래스 이름
iterator it : 반복자 이름
예제 : iterlist
1 #include <iostream>
2 #include <list>
3 using namespace std;
4
5 void main()
6 {
7 int ari[] = { 1, 2, 3, 4, 5 };
8 list<int>li(&ari[0], &ari[5]);
9
10 list<int>::iterator it;
11 for ( it = li.begin(); it != li.end() ; it++)
12 {
13 printf("%d\n", *it);
14 }
15 }
각 컨테이너의 내부 구조는 상당히 다르지만 반복자를 사용하면 똑같은 방법으로 순회가 가능하다.
반복자는 컨테이너를 순회하는 방법과 컨테이너의 한 요소를 참조하는 방법을 획일화함으로써 알고리즘들이 컨테이너의 내부 구조에 대해 독립성을 가지도록한다.
예제 : itergeneric
2 #include <vector>
3 #include <list>
4 using namespace std;
5
6 template<typename IT>
7 void Print(IT s, IT e )
8 {
9 //IT it;
10 for ( IT it = s ; it != e ; it++ )
11 {
12 printf("%d ", *it);
13 }
14 printf("\n");
15 }
16
17 void main()
18 {
19 int ari[] = { 1, 2, 3, 4, 5};
20 vector<int> vi(&ari[0], &ari[5]);
21 list<int> li(&ari[0], &ari[5]);
22
23 Print(&ari[0], &ari[5]);
24 Print(vi.begin(), vi.end());
25 Print(li.begin(), li.end());
26 }
반복자는 컨테이너를 다루는 기본적인 방법이다. 컨테이너에 요소를 삽입, 삭제할 때 또는 검색한 결과를 리턴할 때 반복자가 필요하다.
STL의 모든 함수들은 컨테이너내의 위치를 칭할 때 반복자를 사용하며 검색 결과를 보고할 때도 반복자를 사용한다.
반복자는 임의의 컨테이너와 알고리즘이 서로 몰라도 같이 동작할 수 있도록 이어주는 매개체 역할을 한다.
ps : 자세한 내용은 www.WinAPI.co.kr 참고
'[ C/ C++ 프로그래밍 ] > [ STL ]' 카테고리의 다른 글
[ 혼연 정리 ] 함수객체- 2 [알고리즘의 변형] (2) | 2010.06.24 |
---|---|
[ 혼연 정리 ] 함수객체- 1 [함수객체] (0) | 2010.06.24 |
[ 혼연 정리 ] STL 개요 - 4 [알고리즘] (1) | 2010.05.31 |
[ 혼연 정리 ] STL 개요 - 2 [ STL의 구조, 컨터이너 ] (2) | 2010.05.25 |
[ 혼연 정리 ] STL 개요 - 1 (1) | 2010.05.19 |