设计模式中迭代器模式定义:提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该聚合物的内部表述方式。
STL中有5中迭代器,分别为
input_iterator_tag 输入迭代器
ouput_iterator_tag 输出迭代器
forward_iterator_tag 前向迭代器 如单向链表
bidirectional_iterator_tag 双向迭代器 双向链表
random_access_iterator_tag 随机迭代器 如vector中的迭代器
关系如下:
input_iterator_tag
---------- | derive
forward_iterator_tag
---------- | derive
bidirectional_iterator_tag
---------- | derive
random_access_iterator_tag
迭代器必须提供5种类型,供STL中的算法使用
template<class Category, class T, class Distance = ptrdiff_t,
class Pointer = T*, class Reference = T&>
struct iterator{
typedef Category iterator_category;
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
用萃取器来获得迭代器中的5种类型
template<class Iterator>
struct iterator_traits{
typedef typename Itreator::iterator_category iterator_category;
typedef typename Iterator::value_type value_type;
typedef typename Iterator::difference_type difference_type;
typedef typename Iterator::pointer pointer;
typedef typename Iterator::reference reference
}
针对原生指针而设计的traits偏特化版
template<class T>
struct iterator_traits<T*>{ // 偏特化
typedef random_access_iterator_tag iterator_tag;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
}