【STL源码拆解】基于源码分析forward_lsit容器实现(详细!)

本文详细分析了C++11中的顺序容器forward_list,从其基本概念到源码实现,包括forward_list的类模板、基类_Fwd_list_base及其成员变量,以及内存结构。通过深入源码,展示了forward_list如何基于单链表结构工作,并以构造函数为例,揭示了其内存分配和节点创建的过程。
摘要由CSDN通过智能技术生成

本篇文章介绍一下c++11中新增的顺序容器forward_list,基于stl的源码分析一下该容器的整体实现及数据结构。

说明一下,我用的是gcc7.1.0编译器,标准库源代码也是这个版本的。

按照惯例,还是先看一下本文大纲,如下:

在这里插入图片描述

1. forward_list是什么

forward_list是c++11为STL新增加的一种顺序容器,使用的时候包含头文件forward_list即可,真实的类声明位于头文件bits/forward_list.h中,类forward_list是一个类模板,基于单链表结构实现,下面我们就来基于forward_list的源码来看下它的具体实现。

2. forward_list周边类介绍

在正式开始介绍类模板forward_list之前,我们先了解下它所使用到的其他类型的介绍,这些类型是理解forward_list源码实现的前置条件。

2.1 类模板_Fwd_list_node和它的基类_Fwd_list_node_base

类模板_Fwd_list_node声明同样位于头文件bits/forward_list.h中,先看下类声明,如下:

template<typename _Tp>
    struct _Fwd_list_node
    : public _Fwd_list_node_base
    {
   
      _Fwd_list_node() = default;

      __gnu_cxx::__aligned_buffer<_Tp> _M_storage;

      _Tp*
      _M_valptr() noexcept
      {
    return _M_storage._M_ptr(); }

      const _Tp*
      _M_valptr() const noexcept
      {
    return _M_storage._M_ptr(); }
    };

该类定义了一个成员变量_M_storage,这个成员变量类型是__gnu_cxx::__aligned_buffer<_Tp>,同样是一个类模板,看看类模板__aligned_buffer的类声明,如下:

template<typename _Tp>
    struct __aligned_buffer
    : std::aligned_storage<sizeof(_Tp), std::alignment_of<_Tp>::value>
    {
   
      typename
	std
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp加油站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值