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

第十三,四节 深度探索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

原文地址:https://www.cnblogs.com/ranjiewen/p/6980486.html