C++ STL容器源码框架
【侯捷-SL体系结构内核分析-forward_list探索】
以forward_list为例,分析源码框架。
容器类成员变量包装类 _XX_val
其中,变量 _Myhead就是forward_list的头指针。
容器类继承关系
- _Flist_alloc类
容器allocator的基类,其中含有数据成员_Flist_val。
2. _Flist_buy类
继承自_Flist_alloc类
其中_Flist_base_types是一个泛型结构体。如下图:
3. forward_list类
最终的单向链表类,又继承自_Flist_buy类。
所以可以看出,forward_list最终的数据成员来自父类_Flist_alloc的数据成员 _Compressed_pair<_Alnode, _Flist_val<_Val_types>> _Mypair,其中_Mypair就组合了成员变量包装泛型类 _Flist_val。
forward_list iterator类继承关系
- _Flist_unchecked_const_iterator泛型类
iterator的基类,含有指向forward_list数据节点的指针_Ptr。
- _Flist_const_iterator泛型类
继承自_Flist_unchecked_const_iterator泛型类。
- _Flist_iterator泛型类
最终的 forward_list 的泛化指针类。
所以可以看出,_Flist_iterator最终的数据成员来自父类_Flist_unchecked_const_iterator的数据成员 Nodeptr _Ptr,即拥有一个指向链表节点的指针。