【C++】:list容器的基本使用

2024-06-18 1199阅读

目录

  • 🚀前言
  • 一,list的介绍
  • 二,list的基本使用
    • 2.1 list的构造
    • 2.2 list迭代器的使用
    • 2.3 list的头插,头删,尾插和尾删
    • 2.4 list的插入和删除
    • 2.5 list 的 resize/swap/clear

      🚀前言

      list中的接口比较多,与string和vector类似,只需要掌握如何正确的使用,然后再去深入研究背后的原理,已达到可扩展的能力。本文只介绍list中一些常见的重要接口。

      注意:使用list时需要包含头文件。

      一,list的介绍

      1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
      2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向

        其前一个元素和后一个元素。

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

        效。

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

        更好。

      5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list

        的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)

      二,list的基本使用

      2.1 list的构造

      【C++】:list容器的基本使用

      void TestList1()
      {
          list l1;                         // 构造空的l1
          list l2(4, 100);                 // l2中放4个值为100的元素
          list l3(l2.begin(), l2.end());  // 用l2的[begin(), end())左闭右开的区间构造l3
          list l4(l3);                    // 用l3拷贝构造l4
          // 以数组为迭代器区间构造l5
          int array[] = { 16,2,77,29 };
          list l5(array, array + sizeof(array) / sizeof(int));
          // 列表格式初始化C++11
          list l6{ 1,2,3,4,5 };
          // 用迭代器方式打印l5中的元素
          list::iterator it = l5.begin();
          while (it != l5.end())
          {
              cout 
          // 注意这里调用的是list的 begin() const,返回list的const_iterator对象
          for (list
              cout 
          int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
          list
              cout 
              cout 
          int array[] = { 1, 2, 3 };
          list
          int array1[] = { 1, 2, 3 };
          list 7, 8, 9 };
          L.insert(pos, v.begin(), v.end());
          PrintList(L);
          // 删除pos位置上的元素
          L.erase(pos);
          PrintList(L);
          // 删除list中[begin, end)区间中的元素,即删除list中的所有元素
          L.erase(L.begin(), L.end());
          PrintList(L);
      }
      
          // 用数组来构造list
          int array1[] = { 1, 2, 3 };
          list
VPS购买请点击我

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

目录[+]