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

list的使用

1:list文档

list文档

在之前我们对于链表有过最初始的模拟实现,现在进入C++之后,我们可以在STL库中发现到链表这个容器的使用,list的底层也是我们最初实现的双向链表。

2:list的使用

list的接口有很多,我们需要先掌握其中一部分的接口,然后了解其底层,为以后的可扩展使用接口做铺垫

1:list的构造

2:list的迭代器

注意:

1:begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
2:rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动

3:list capacity

4:list element access

5:list modifires

3:list的迭代器失效问题

我们在之前的vector和string里面知道了迭代器可以失效,我们现在来探索一下再list中迭代器是如何失效的

前面说过,此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

void TestListIterator1()
{int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(array, array + sizeof(array) / sizeof(array[0]));auto it = l.begin();while (it != l.end()){// erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给其赋值l.erase(it);++it;}
}
// 改正
void TestListIterator()
{int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(array, array + sizeof(array) / sizeof(array[0]));auto it = l.begin();while (it != l.end()){l.erase(it++); // it = l.erase(it);}
}

相关文章:

  • 基于C++(MFC)实现的文件管理系统
  • Visual Studio C++引入第三方库
  • Spring HTTP Interface 入门案例介绍
  • sentinel安装部署及测试--实践
  • 在Vmware15(虚拟机免费) 中安装纯净win10详细过程
  • RK3588 实现音视频对讲
  • Oracle 12.1.0.2补丁安装全流程
  • 如何使用3DMAX插件PFSpliner将3D对象转化为艺术样条线?
  • AOP的基本应用案例---统计每个函数的执行时间
  • IntelliJ IDEA 项目导入后 Java 文件图标显示为红色小写 j 的解决方法
  • LVS+keepalived搭建高可用架构
  • 资源直方图与资源平衡技术在资源约束下的作用是什么?
  • Paramiko 使用教程
  • [特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
  • css button 点击效果
  • Github 2025-04-17 Go开源项目日报 Top9
  • Go:低级编程
  • QT 初体验
  • 无源蓝牙技术与传统RFID(射频识别)对比
  • 使用DDR4控制器实现多通道数据读写(八)
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  • 阿里上季度营收增7%:淘天营收创新高,AI产品营收连续七个季度三位数增长
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 奥古斯都时代的历史学家李维
  • 党建评:对违规宴饮等问题要坚决露头就打