【C++】list的使用(上)

2024-06-04 7131阅读

【C++】list的使用(上) 第1张

🔥个人主页: Forcible Bug Maker

🔥专栏: STL || C++

目录

  • 前言
  • 🌈关于list
  • 🔥默认成员函数
    • ==构造函数(constructor)==
    • ==析构函数(destructor)==
    • ==赋值运算符重载==
    • 🔥迭代器接口(Iterators)
    • 🔥容量获取接口(Capacity)
      • ==empty和size==
      • 🔥元素获取(Element access)
      • 🔥修改器(Modifiers)
        • ==assign==
        • ==push_back,pop_back,push_front和pop_front==
        • ==insert==
        • ==erase==
        • ==resize==
        • ==clear==
        • 结语

          前言

          本篇博客主要内容:STL库中list的介绍以及list用法的讲解。

          我们已经知道,string和vector的底层都是简单的顺序表,而list的底层就和之前的两个大不相同了,list的底层是一个带头双向循环链表。学习list之前,如果你还不知道什么是链表,完全由必要学习一下,可以看看我初阶数据结构所讲到的内容:初阶数据结构-顺序表和链表(C语言)

          在C++中,我们可以直接使用list创建链表。

          🌈关于list

          【C++】list的使用(上) 第2张

          list是可以在常数范围内任意位置进行插入和删除的序列式容器,并且可以前后双向迭代。

          list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针向其前一个元素和后一个元素。

          list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已经让其更简单更高效。

          与其他序列式容器相比(array,vector,deque),list通常在任意位置进行插入,移除元素的执行效率更好。

          于其他序列式容器相比,list和forward_list最大的缺陷是不支持元素的随机访问,比如:需要访问list的第六个元素,必须从已有的位置(比如头部或尾部)迭代到该位置,这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个结点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)。

          🔥默认成员函数

          【C++】list的使用(上) 第3张

          构造函数(constructor)

          【C++】list的使用(上) 第4张

          注:对于最后一个参数(alloc),可以不用深究,在后期学了内存池相关的内容后会细讲。

          构造一个list容器对象,可以根据以下四种方式初始化:

          default (1)

          explicit list (const allocator_type& alloc = allocator_type());
          

          这是std::list的无参构造。它创建了一个不含任何元素的空list对象。其中explicit关键字阻止了隐式类型转换。

          fill (2)

          explicit list (size_type n, const value_type& val = value_type(),
                         const allocator_type& alloc = allocator_type());
          

          构造一个含有n个val值得list对象。

          range (3)

          template 
            list (InputIterator first, InputIterator last,
                   const allocator_type& alloc = allocator_type());
          

          按迭代器区间[first, last) 的内容顺序构造list对象。

          copy (4)

          list (const list& x);
          

          构造一个x对象得拷贝。

          允许隐式类型转换。

          代码案例:

          // constructing lists
          #include 
          #include 
          int main()
          {
              // constructors used in the same order as described above:
              std::list first;                                // 构建数据类型为整型的一个空链表
              std::list second(4, 100);                       // 构建一个包含四个值为100的链表
              std::list third(second.begin(), second.end());  // 通过second链表的迭代器构建third
              std::list fourth(third);                       // 用third拷贝一个相同的链表fourth
              // the iterator constructor can also be used to construct from arrays:
              int myints[] = { 16,2,77,29 };
              std::list fifth(myints, myints + sizeof(myints) / sizeof(int));
              std::cout 
          	std::list
          	list 1,2,3,4 });
          	
          	// 获取正向迭代器遍历
          	list
          		cout 
          		cout 
          	list 1,2,3,4 });
          	cout 
          	list 1,2,3,4 });
          	cout 
          	list 1,2,3,4 });
          	list 0,0,0,0 });
          	lt1.assign(lt2.begin(), lt2.end());
          	for (auto e : lt1) {
          		cout 
          		cout 
          	list 0,0,0 });
          	for (auto e : lt) {cout  cout  cout  cout  cout 
              std::list
          	list 1,2,3,4,5 });
          	for (auto e : lt) { cout  cout  cout 
              std::list

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]