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