天天看点

侯捷STL学习(六)--深入list && Iterator traits

​<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&amp; 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

继续阅读