7.容器 list

容器 List

双向循环链表

在这里插入图片描述

  • 数据成员:node
  • node 中 有两个void* 指针,一个T类型元素。
  • 源码中有很多的typedef,需要往前找到底是什么类型
  • 注意void* 应该在后面操作时转换为T*
  • 分配器使用的是 alloc

iterator - smart pointer

  • 在链表的结束位置放置了一个哨兵节点:list.end();
  • 对迭代器++时应该指向链表的下一个节点,而不是单纯的指针++操作
  • 使用运算符重载(5个)来实现
    在这里插入图片描述
  1. dereference

  2. 成员访问运算符

  3. 前置++

  4. 后置++ int 没有意义,形式上做区分

  5. 前置,后置-- ,没有列出。

    注意ctor 到底是在哪里调用的

在这里插入图片描述

  1. 前置++返回的是自身的引用,不会有临时对象的生成
  2. 后置++返回的是临时对象 会调用ctor
  3. 考虑前置++ 和后置++ 的行为

运算符的行为要与作用在int上的行为一致。

前置++返回的是自身的引用

后置++返回的是对象(匿名)

使用的形式

在这里插入图片描述

GNUC 4.9 的iterator

在这里插入图片描述

  • void* pointer
  • 迭代器传了三个模版参数,没有必要传三个参数,一个就好了

GNUC4.9 list 继承结构,过于复杂了

  • list的size是多少?里面还有compressed_pair 使用了其他的技术来优化

Iterator需要遵循的规则

  • iterator_traits 所需的五种typedef
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值