Iteratpr base class
이 기본 클래스는 실제로 어떤 반복자 유형에도 존재할 필요가 없는 일부 구성원 유형만 제공한다. (반복자 유형에는 특정 구성원 요구사항이 없음)
그러나 적절한 인스턴스화를 자동으로 생성하기 위해 기본 iterator_traits 클래스 템플릿에 필요한 멤버를 정의합니다. (그리고 그러한 인스턴스화는 모든 반복자 유형에 대해 유효해야 함)
Definition
1
2
3
4
5
6
7
8
9
template < class Category , class T , class Distance = ptrdiff_t ,
class Pointer = T * , class Reference = T & >
struct iterator {
typedef T value_type ;
typedef Distance difference_type ;
typedef Pointer pointer ;
typedef Reference reference ;
typedef Category iterator_category ;
};
Template parameters
Category : 반복자가 속한 카테고리이다. 다음 iterator_tag 중 하나이어야 한다.
input_iterator_tag : 입력 반복자
ouput_iterator_tag : 출력 반복자
forward_iterator_tag : 순방향 반복자
bidirectional_iterator_tag : 양방향 반복자
random_access_iterator_tag : 임의 접근 반복자
T : 반복자가 가리키는 요소의 타입이다.
Distance : 두 반복자 간의 차이를 나타내는 타입이다.
Pointer : 반복자가 가리키는 요소에 대한 포인터를 나타내는 타입이다.
Reference : 반복자가 가리키는 요소에 대한 참조를 나타내는 타입이다.
Example
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
// std::iterator example
#include <iostream> // std::cout
#include <iterator> // std::iterator, std::input_iterator_tag
class MyIterator : public std :: iterator < std :: input_iterator_tag , int >
{
int * p ;
public:
MyIterator ( int * x ) : p ( x ) {}
MyIterator ( const MyIterator & mit ) : p ( mit . p ) {}
MyIterator & operator ++ () { ++ p ; return * this ;}
MyIterator operator ++ ( int ) { MyIterator tmp ( * this ); operator ++ (); return tmp ;}
bool operator == ( const MyIterator & rhs ) const { return p == rhs . p ;}
bool operator != ( const MyIterator & rhs ) const { return p != rhs . p ;}
int & operator * () { return * p ;}
};
int main () {
int numbers [] = { 10 , 20 , 30 , 40 , 50 };
MyIterator from ( numbers );
MyIterator until ( numbers + 5 );
for ( MyIterator it = from ; it != until ; it ++ )
std :: cout << * it << ' ' ;
std :: cout << '\n' ;
return 0 ;
}
References