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是一个指向迭代器的指针,然后取*得到迭代器。
侯捷C++STL 体系结构与内核分析:深度探索list(上),list的结构及迭代器
最新推荐文章于 2022-05-02 15:33:15 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)