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

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迭代器的实现,如何使用模板实现传参

 


 

http://www.xdnf.cn/news/3736.html

相关文章:

  • 计算机基础:二进制基础17,八进制减法
  • 大模型中常见的精度类型及区别​
  • 论微服务架构及其应用
  • 传奇各职业/战士/法师/道士/勋章爆率及出处产出地
  • 54、【OS】【Nuttx】编码规范解读(二)
  • 130. 被围绕的区域
  • (1)大模型的提示词工程实践技巧---LLM输出配置详解
  • 数字孪生赋能智慧城市:从概念到落地的深度实践
  • 【文献阅读】中国湿地随着保护和修复的反弹
  • DeepSeek眼中的文明印记:金刚经
  • 004 树与二叉树:从原理到实战
  • Baklib赋能企业知识管理数字化转型
  • MCP 协议知识分享指南
  • VS调试技巧
  • 网站即时备份,网站即时备份的方法有哪些
  • 简介QML中的Canvas
  • 机器学习入门-线性回归模型/损失函数/梯度下降
  • 【WZOI】【题解】【质数密度】质数密度题解报告
  • 旋转矩阵公式理解
  • 【云备份】服务端数据管理模块设计与实现
  • 嵌入式 GCC 编译工具链:32 位与 64 位助力高效开发
  • [UVM]UVM中reg_map的作用及多个rem_map的使用案例
  • 【C++篇】类和对象(上)
  • 饱和蒸汽再生数据采集挥发性有机物(VOCs)吸附脱附实验装置
  • Pillow 玩图术:轻松获取图片尺寸和颜色模式
  • 肥胖风险的多类预测——CatBoost模型的89%
  • 《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用声音合成玩音乐:MATLAB电子琴制作(超级趣味实践版)
  • 用可视化学习逆置法
  • 【Linux】Linux应用开发小经验
  • 信息安全导论 第七章 网络边界防御技术