如何让自己的迭代器融入标准的STL框架

2013年4月27日 由 Creater 留言 »

任何迭代器,如果想能与STL完美兼容,也即是能够使用STL的各种算法与各种工具。那么就得遵循它的要求,那就是有5个内嵌类型必须定义,这样就可以让traits萃取。但是在每个迭代器都去自己写这些确实容易遗忘,但是这里有一个较简单的方法来实现。那就是STL提供的iterator这个类,可以让自己定义的新的迭代器继承他。

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;
};


可以看出iterator有几个默认模板参数,所以只需要提供前两个就ok了。因为iterator没有任何成员,所以不用担心效率折扣。
比如

template<class T> 
class myIterator :
	public iterator<std::forward_iterator_tag, T>
	{/*--*/};
广告位

发表评论

你必须 登陆 方可发表评论.