stl迭代器模式
来源:互联网 发布:linux读取u盘文件 编辑:程序博客网 时间:2024/05/28 05:15
迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算法。
最简单的,下面的语句。
vector<int> vec;vector<int>::iterator iter = vec.begin();在stl_vector.h中
typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
vector<int>::iterator就相当于__normal_iterator<int*, vector>,是一个__normal_iterator实例化的对象。
在stl_iterator.h中(注释是我自己写的)
using std::iterator_traits; using std::iterator; template<typename _Iterator, typename _Container> class __normal_iterator { protected: _Iterator _M_current;//与容器的联系 typedef iterator_traits<_Iterator>__traits_type;//iterator_traits<int *>萃取机 public: typedef _Iteratoriterator_type;//int* typedef typename __traits_type::iterator_category iterator_category;//random_access_iterator_tag typedef typename __traits_type::value_type value_type;//int typedef typename __traits_type::difference_type difference_type; typedef typename __traits_type::reference reference; typedef typename __traits_type::pointer pointer;... };_M_current这个变量保持了与vector<int>的联系,他的实际类型应该是int*。__normal_iterator这个类模板中实现了迭代器的操作,包括解引用,++,--,[]等。
在stl_iterator.h中,不止有__normal_iterator,还有reverse_iterator,move_iterator,back_insert_iterator,front_insert_iterator。这几个就是迭代器模式图中的具体的迭代器类concreteiterator。同时在stl里,concreteiterator和iterator的关系不是继承,而是组合关系。
上一张迭代器模式的结构图。
阅读全文
0 0
- stl迭代器模式
- 迭代器模式及STL中迭代器概念
- 设计模式之iterator模式到STL中iterator迭代器
- Item03. 设计模式 & Item04. STL
- STL 设计模式总述
- 设计模式之--迭代器模式(自定义迭代器与STL::find()配合查找链表元素)
- 深入设模式之:迭代器模式之编写一个兼容STL 算法的Iterator
- STL迭代器
- STL迭代器
- STL-迭代器
- STL迭代器
- STL 迭代器
- STL迭代器
- STL 迭代器
- STL--迭代器
- STL 迭代器
- STL迭代器
- STL 迭代器
- (转)金融“核武器”即将引爆整个行业
- CSS选择器优先级,权重问题
- RM -RF /
- Flink Yarn配置
- Java的方法重载和方法覆盖的区别
- stl迭代器模式
- 初始HTML
- (搬运).net起步 (通过 Membership 进行权限控制)
- 【合并Shader】合并渲染状态
- angularjs之checkbox
- float
- Lecture3: Evaluation
- android热修复--手写热修复
- SonicOperator之算法优化2