羌塘之风

重剑无锋,大巧不工。

导航

STL笔记:iterator

  在此总结下STL中iterator的实现:

  首先,STL中存在三类神器:容器,算法,迭代器。他们三者的关系是:算法通过迭代器操纵容器。这样有一个好处是算法的设计无需考虑具体的容器,只操纵迭代器就可以了。当我们需要自己设计一个算法,兼容STL中的容器,那么只需要在满足迭代器的种种规范下设计算法即可。反过来,当我们需要自己设计一个容器,并且这个容器兼容STL中的算法,这个容器只需要提供相应的满足种种规范的迭代器即可。

  所以迭代器的作用不言而喻:它是连接容器和算法的粘合剂。

  而话又说回来,既然容器中提供了迭代器,那么还需要单独设计出一个<iterator>干嘛?规范。无论是STL中已存在的容器和算法,或者是设计兼容STL的容器和算法,都需要满足这样一种规范,使二者能够完美的配合起来。

  一个迭代器,需要遵循如下的规范:指向的对象的类型value_type,两个迭代器之间的距离difference_type,指向对象的引用reference,指向对象的指针pointer,以及这个迭代器所采取的策略category_type。代码如下:

1 template<class category,class T,class distance=ptrdiff_t,class Pointer=T*,class Reference=T&>
2 struct iterator{
3     typedef category category_type;
4     typedef T value_type;
5     typedef distance difference_type;
6     typedef Pointer pointer;
7     typedef Reference    
8 };

对于迭代器采取的策略category_type,是这样理解的:

 

posted on 2013-11-12 19:51  羌塘之风  阅读(210)  评论(0)    收藏  举报