侯捷STL学习(六)--深入list && Iterator traits
第十三,四节 深度探索list(上,下)
-
list Gnu2.9
源代码实现 -
注意
node
代码和图示的位置 -
实现前闭后开,增加一个空白节点
-
用的分配器alloc
-
Iterator
智能指针,需要知道结点node的next指针 -
除了array和vector,其他容器的iterator都是一个class
-
iterator
class 实现
- 必须做至少5个
typedef
,很多操作符重载 - 前++
++i
其中i作为对象,self& operator++(){}
返回引用,这样可以进行两次前++ - 后++
i++
self operator++(int){}
,阻止两次后++ ++++i
对的++(++i)
;不允许两次后++(i++)++
list
的迭代器解引用,不像vetor直接是数据,而是(*iter).data
Gnu 4.9
的改善地方,下图中有说明:链表指向自己
- G4.9类之间的关系变得复杂
第十五节 迭代器的设计原则和Iterator Traits的作用与设计
Iterator
需要遵循的原则,必须提供5种associated types
- 算法向iterator提问,获得一些类型type,方便处理
-
问答式
-
Traits
特性,特质
-
算法的参数,可能是iterator或者普通指针,通过中间层traits实现
-
算法执行时,根据传入的参数,选择相应的
iterator_traits
-
标准库中还有其他的traits:
type traits , char traits, allocator traits, pointer traits, array traits
等
C/C++基本语法学习
STL
C++ primer