ptrdiff_t :: 두 포인터의 차이를 뺀 결과의 정수형
template<class Iter>
struct iterator_traits {
typedef typename Iter::iterator_category iterator_category;
typedef typename Iter::value_type value_type;
typedef typename Iter::difference_type difference_type;
typedef typename Iter::pointer pointer;
typedef typename Iter::reference reference;
};
struct InputIteratorTag {};
struct OutputIteratorTag {};
struct ForwardIteratorTag : public InputIteratorTag {};
struct BidirectionalIteratorTag : public ForwardIteratorTag {};
struct RandomAccessIteratorTag : public BidirectionalIteratorTag {};
rev iterator 는 iterator보다 하나 많은데 있고 base는 하나 뒤에있다
Input iterator : 전진만 가능, 한번에 하나만 읽기 가능
Output iterator : 전진만 가능, 한번에 하나만 쓰기 가능
Foward iterator : 전진만 가능, 한번에 여러개 읽고 쓰기 가능
Bidirectional iterator : 전/후진 모두 가능, 한번에 여러개 읽고 쓰기 가능
Random access iterator : 반복자를 임의의 위치만큼 전/후진 가능