Iterator는 기본 클래스 템블릿이다. 이것은 반복자 클래스를 파생하는 데 사용할 수 있는 기본 클래스 템플릿입니다. 반복자 클래스가 아니며 반복자가 가져야 하는 기능을 제공하지 않는다(?).
이 기본 클래스는 일부 멤버 유형만 제공하며, 실제로는 모든 반복자 유형에 존재할 필요가 없다(반복자 유형에는 특정 멤버 요구 사항이 없음). 그러나, 기본 iterator_traits 클래스 템플릿이 적절한 인스턴스를 자동으로 생성하는 데 필요한 멤버를 정의하기 때문에 유용하다(인스턴스화는 모든 반복자 유형에 유효해야 함).
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;
};
// 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;
}
Reference
[1] https://cplusplus.com/reference/iterator/iterator/?kw=iterator