第十三,四节 深度探索list(上,下)
-
list Gnu2.9源代码实现 -
注意
node代码和图示的位置 -
实现前闭后开,增加一个空白节点
-
用的分配器alloc
-
Iterator智能指针,需要知道结点node的next指针 -
除了array和vector,其他容器的iterator都是一个class
-
iteratorclass 实现
- 必须做至少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等