C++ STL容器源码—forward_list

本文深入分析了C++ STL中的forward_list容器,详细介绍了其内部结构,包括头指针_Myhead、iterator类的成员_Ptr,以及类的继承关系,如_Flist_alloc、_Flist_base_types等,揭示了forward_list如何通过继承和包装实现数据存储和迭代器操作。

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

总结

  1. forward_list中包含数据:
  • 指向节点的头指针_Myhead,该指针来源于继承基类。
  1. forward_list iterator中包含数据:
  • 指向当前节点的指针_Ptr,该指针来源于继承基类。

类继承关系如下:
在这里插入图片描述

容器类成员变量包装类 _XX_val

_Flist_val类
其中,变量 _Myhead就是forward_list的头指针。

容器类继承关系
  1. _Flist_alloc类

容器allocator的基类,其中含有数据成员_Flist_val。
在这里插入图片描述
_Mypair将forward_list的数据部分_Myhead再包装一次。

  1. _Flist_buy类
    继承自_Flist_alloc类
    在这里插入图片描述
    其中_Flist_base_types是一个泛型结构体。如下图:
    在这里插入图片描述
  2. forward_list类
    最终的单向链表类,又继承自_Flist_buy类。
    在这里插入图片描述
    所以可以看出,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。
    在这里插入图片描述
  2. _Flist_const_iterator泛型类
    继承自_Flist_unchecked_const_iterator泛型类。
    在这里插入图片描述
  3. _Flist_iterator泛型类
    最终的 forward_list 的泛化指针类。
    在这里插入图片描述
    所以可以看出,_Flist_iterator最终的数据成员来自父类_Flist_unchecked_const_iterator的数据成员 Nodeptr _Ptr,即拥有一个指向链表节点的指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值