侯捷C++STL 体系结构与内核分析:深度探索list(上),list的结构及迭代器

本文深入探讨了C++ STL中list的数据结构,强调了由于链表非连续存储特性,迭代器必须以class形式实现。详细阐述了迭代器的typedef、操作符重载,尤其是前置和后置递增操作的区别,并指出++i在效率上的优势。
摘要由CSDN通过智能技术生成

list的底层实现:
在这里插入图片描述
list只有一个元素node,其类型是list_node*,是一个指针,在32位系统中取sizeof为4。list_node是一个节点。
在节点的定义里,第一句typedef void* void_pointer;指针指向void,会转型。
链表的存储不是连续空间,所以不能用普通指针类型的迭代器,++指针肯定不会指向下一个链表的位置。
此处的迭代器(除了vector以外的容器迭代器都是class)是一个class。它重载了指针的很多功能。具体细节如下图:
在这里插入图片描述
所有容器的迭代器必须要做5个typedef,还有各种操作符重载。拿++操作符举例,++i是前置型,i++是后置型。为了区别开,++i没有参数(i就是一个object)。i++有一个参数,只是形式上有意义,占位符。
对迭代器(此处是泡泡),泡泡包含一个node,node是一个指针。++i意味着,泡泡(this)没变,但是里面的node变了,指向了下一个节点。最后返回了迭代器。this是一个指向迭代器的指针,然后取*得到迭代器。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值