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

第十三,四节 深度探索list(上,下)

  • list Gnu2.9源代码实现
  • 注意node代码和图示的位置
  • 实现前闭后开,增加一个空白节点
    f906v6h.png

  • 用的分配器alloc
  • Iterator智能指针,需要知道结点node的next指针
  • 除了array和vector,其他容器的iterator都是一个class
  • iteratorclass 实现

UByLO1u.png

  • 必须做至少5个typedef,很多操作符重载
  • 前++++i其中i作为对象,self& operator++(){}返回引用,这样可以进行两次前++
  • 后++ i++ self operator++(int){},阻止两次后++
  • ++++i对的++(++i);不允许两次后++ (i++)++

XijKXER.png

  • list的迭代器解引用,不像vetor直接是数据,而是(*iter).data
  • Gnu 4.9的改善地方,下图中有说明:链表指向自己

iWK8m1u.png

  • G4.9类之间的关系变得复杂

WQM59up.png

第十五节 迭代器的设计原则和Iterator Traits的作用与设计

  • Iterator需要遵循的原则,必须提供5种associated types
  • 算法向iterator提问,获得一些类型type,方便处理

pLTxJJ2.png

  • 问答式
    bNZUKpt.png

  • Traits特性,特质
    QbV2H8w.png
  • 算法的参数,可能是iterator或者普通指针,通过中间层traits实现
  • 算法执行时,根据传入的参数,选择相应的iterator_traits
    FaxEXvw.png
    hwqp9lM.png

  • 标准库中还有其他的traits:type traits , char traits, allocator traits, pointer traits, array traits

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值