• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-04-27)  STL |   4 条评论  16 
    文章评分 0 次,平均分 0.0

    任何迭代器,如果想能与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>
    	{/*--*/};
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/890.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享