当前位置: 首页 > news >正文

STL之list容器

list的介绍

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

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

3.vector的优点:支持随机访问,间接的就支持了排序/二分查找/堆排序等

               缺点:1.头部和中部的插入效率低,需要挪动数据

                          2.插入数据空间不够需要增容,增容需要开新空间,拷贝数据,释放旧空间

    list的优点:没有增容代价,且任意位置插入都是0(1);

              缺点:不支持随机访问,得从头开始遍历查找到后面的元素

所以list和vector是互补的存在

注意:forward_list是单向链表

list的常见函数接口

构造函数:

 

与vector类似

第一个构造空的,第二个构造4个结点,每个都是100,第四个拷贝构造函数

第三个不用记,直接使用第四个去拷贝就行

Capacity接口 :

根据前面的vector和string的学习,相信大家都很熟悉了

empty():判断是否为空

size():返回结点数

相比之下,list没有capacity(),因为它是来一个结点就开一个

 Modifiers接口:

push_front():头插

pop_front():头删 

push_back():尾插

pop_back():尾删

insert():在pos位置插入val

erase():删除pos位置的元素

swap():交换两个list中的元素

clear():清空元素,clear 会遍历链表,为每个节点调用析构函数,并释放节点所占用的内存。

resize():在这里不常用,与之前容器的resize一样

Element access接口:

返回头部和尾部元素

operations接口

splice():转移链表 

sort():排序

reverse():逆置链表

iterator接口:

重点谈迭代器

从支持操作接口的角度分迭代器类型

单向(forward_list)   双向(list)  随机(vector)

it只能++                  it能++--             it能++--也能it+=5,直接跳几个

从使用场景的角度分迭代器类型

(正向迭代器+反向迭代器)+(const修饰迭代器+普通迭代器) 

迭代器失效:

可简单的将迭代器理解成指针(后面会有讲解迭代器如何实现),迭代器失效即迭代器所指向的结点无效,即该结点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除结点的迭代器,其他迭代器不会受影响

int array[]={1,2,3,4,5};
list<int> li(array,array+sizeof(array)/sizeof(array[0));
auto it=li.begin();
while(it!=li.end())
{it=li.erase(it);it++;
}

每次删除都会导致迭代器失效(vector里面我已经详细说明)所以每次删除返回迭代器都要更新it

 简单模拟实现list

June: 这里包含我的c++和Linux及数据结构https://gitee.com/taifanshu/day2.git注意:这里面要深刻体会const迭代器的实现,如何使用模板实现传参

 


 

相关文章:

  • 探索 C++23 std::to_underlying:枚举底层值获取的利器
  • [方法论]软件工程中的设计模式:从理论到实践的深度解析
  • [Windows] Kazumi番剧采集v1.6.9:支持自定义规则+在线观看+弹幕,跨平台下载
  • leetcode0096. 不同的二叉搜索树-medium
  • 大型语言模型个性化助手实现
  • 深度学习经典网络之LeNet-5详解
  • 【BLE】【nRF Connect】 精讲nRF Connect自动化测试套件(宏录制、XML脚本)
  • 最大子段和 Java
  • 青少年编程与数学 02-018 C++数据结构与算法 24课题、密码学算法
  • JavaScript基础-流程控制概念
  • 第六章,BGP---边界网关协议
  • Redis从入门到实战实战篇2
  • 《应用开发突围指南:敏捷开发的实战精髓》
  • ecs网站备份,ecs网站备份的方法
  • 生成式 AI 的阐释
  • Python语句类型与格式规范研究
  • 数据仓库方法论书籍及其阅读建议
  • 【quantity】9 长度单位模块(length.rs)
  • IO模型和多路复用
  • piccolo-large-zh-v2 和 bge-m3哪个效果好?
  • 浙江“胖都来”开业多位明星祝贺,“胖东来”称已取证投诉,律师:碰瓷侵权
  • 山西太原一小区发生爆炸,造成1人遇难21人受伤2人失联
  • 两部门预拨4000万元支持山西、广西、陕西做好抗旱救灾工作
  • A股三大股指涨跌互现:3343股收涨,两市成交超1.1万亿元
  • 五一“大车流”来了,今日午后G40沪陕高速开始迎来出沪高峰
  • 2025年度中国青年五四奖章暨新时代青年先锋奖评选揭晓