天天看点

侯捷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