list 深度探索

声明:本文中所有图件都来自B站侯捷老师授课视频

list 底层实现原理


图1: 容器 list 的 实现代码和原理图(GNU2.9)

  • STL 中,list 是一个 环状双向链表,在 list 尾端加一个空白节点,实现前闭后开区间。
  • 如图1,list 的主要成员变量是 node, 它是一个指针,指向 __list_node, 可见 list 类型大小 等于 指针的大小,即 4个字节(32位)。
list 的迭代器


图2: 容器 list 的 迭代器(实现)

  • 如图2,list 的内存地址不是连续的, 其迭代器是个class,类型是双向迭代器bidirectional iterator 。
  • 如图3,迭代器需要模仿指针的行为,递增需要指向下一个元素,递减需指向上一个元素,所以在 迭代器的 class 中需对前++,后++,前–, 后-- 进行操作符重载。


图3: 容器 list 的 迭代器(递增递减的操作符重载)

list 深度探索_第1张图片
图4: 容器 list 的 迭代器(间接寻址运算符 * 和 取地址运算符 &的操作符重载)

list 的GNU4.9 实现
  • GNU 4.9 的底层代码实现 比 GNU 2.9 复杂得多,以下是 G4.9的实现代码,其基本代码逻辑与GNU2.9是相同的。
    list 深度探索_第2张图片
    list 深度探索_第3张图片

你可能感兴趣的:(STL源码解析,--,总结)