C++ STL容器源码框架

【侯捷-SL体系结构内核分析-forward_list探索】

以forward_list为例,分析源码框架。

容器类成员变量包装类 _XX_val

C++ STL容器源码框架
其中,变量 _Myhead就是forward_list的头指针。

容器类继承关系
  1. _Flist_alloc类

容器allocator的基类,其中含有数据成员_Flist_val。
C++ STL容器源码框架
2. _Flist_buy类
继承自_Flist_alloc类
C++ STL容器源码框架
其中_Flist_base_types是一个泛型结构体。如下图:
C++ STL容器源码框架
3. forward_list类
最终的单向链表类,又继承自_Flist_buy类。
C++ STL容器源码框架
所以可以看出,forward_list最终的数据成员来自父类_Flist_alloc的数据成员 _Compressed_pair<_Alnode, _Flist_val<_Val_types>> _Mypair,其中_Mypair就组合了成员变量包装泛型类 _Flist_val。

forward_list iterator类继承关系
  1. _Flist_unchecked_const_iterator泛型类
    iterator的基类,含有指向forward_list数据节点的指针_Ptr。
    C++ STL容器源码框架
  2. _Flist_const_iterator泛型类
    继承自_Flist_unchecked_const_iterator泛型类。
    C++ STL容器源码框架
  3. _Flist_iterator泛型类
    最终的 forward_list 的泛化指针类。
    C++ STL容器源码框架
    所以可以看出,_Flist_iterator最终的数据成员来自父类_Flist_unchecked_const_iterator的数据成员 Nodeptr _Ptr,即拥有一个指向链表节点的指针。