C++STL系列——深入理解list容器作用原理

本文源码以GNU2.9编译器为例展开说明,同时参考一下GNU4.9的部分源码。

1 list主要源码和数据结构

1.1 GNU2.9源码结构


C++STL系列——深入理解list容器作用原理_第1张图片

1.2 GNU4.9源码结构

1.2.1 _List_node_base

C++STL系列——深入理解list容器作用原理_第2张图片

1.2.2 _List_node

C++STL系列——深入理解list容器作用原理_第3张图片
因此,一个list实例的size为24个字节(考虑内存对齐)。

2 iterator迭代器

list的迭代器本质上是一个class,单纯从list这种数据结构本身来看,list的遍历不能通过next指针++的方式对list元素进行遍历–list的存储空间为链表,其内存空间不是连续的,因此不能使用next指针++的方式推动指针指向下一个元素,因此需要封装list迭代器iterator为一个class类,使变成一个智能的“指针”,可以通过iterator++就可以实现指向下一个元素(list的iterator迭代器正是通过重载++运算符实现到链表node中找到next指针,以实现++操作)
C++STL系列——深入理解list容器作用原理_第4张图片

2.1 operator++操作符重载

2.2 operator*操作符重载C++STL系列——深入理解list容器作用原理_第5张图片

2.3 GNU4.9源码结构

C++STL系列——深入理解list容器作用原理_第6张图片
因此,list::iterator实例的size为8个字节。

3 参考材料

  • 侯捷《STL标准库和泛型编程》

你可能感兴趣的:(list,STL,C++)