【侯捷-SL体系结构内核分析-forward_list探索】
总结
- forward_list中包含数据:
- 指向节点的头指针_Myhead,该指针来源于继承基类。
- forward_list iterator中包含数据:
- 指向当前节点的指针_Ptr,该指针来源于继承基类。
类继承关系如下:

容器类成员变量包装类 _XX_val

其中,变量 _Myhead就是forward_list的头指针。
容器类继承关系
- _Flist_alloc类
容器allocator的基类,其中含有数据成员_Flist_val。

_Mypair将forward_list的数据部分_Myhead再包装一次。
- _Flist_buy类
继承自_Flist_alloc类

其中_Flist_base_types是一个泛型结构体。如下图:

- 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,即拥有一个指向链表节点的指针。
本文深入分析了C++ STL中的forward_list容器,详细介绍了其内部结构,包括头指针_Myhead、iterator类的成员_Ptr,以及类的继承关系,如_Flist_alloc、_Flist_base_types等,揭示了forward_list如何通过继承和包装实现数据存储和迭代器操作。
571

被折叠的 条评论
为什么被折叠?



