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

C++容器之list基本使用

目录

前言

一、list的介绍?

二、使用

1.list的构造

2.list iterator的使用

3.list capacity

 🥇 empty

 🥇size

4.list element access 

🥇 front

🥇 back

5.list modifiers 

 🥇 push_front

🥇 pop_front 

​编辑

🥇 push_back 

🥇 pop_back  

🥇 insert

🥇 erase

🥇 swap

​编辑 

🥇 clear

6.list的迭代器失效

总结



前言

本文讲介绍C++中重要的容器list他的常见接口,并且会介绍list和vector的区别


一、list的介绍?

list容器其实是一个带头节点的双向循环链表。下边是list的文档介绍

list的文档介绍

二、使用

1.list的构造

构造函数接口说明
list(sizt_t n,const T& val=T())构造的list中包含n个val的值
list()构造空的list
list(const list& x)构造拷贝函数
list(Inputiterator first,Inputiterator last)用[first,last]区间中的元素构造list

2.list iterator的使用

可以暂时将迭代器理解成一个指针,该指针指向list中的某个节点,但是实际上list的迭代器实现相比于string和vector会更复杂一下。

函数声明接口说明
begin+end返回第一个元素的迭代器+最后一个元素下一个位置的迭代器
rbegin+rend返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置。

注意:

1.begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动

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


3.list capacity

 

函数声明接口说明
empty检测list是否为空,空返回true,否则返回false
size返回list中有效的节点个数

 🥇 empty

 🥇size

4.list element access 

函数声明接口说明
front返回list的第一个节点中值的引用
back返回list的最后一个节点中值的引用

🥇 front

🥇 back

5.list modifiers 

函数声明接口说明
push_front在list首元素前插入值为val的元素
pop_front删除list中第一个元素
push_back在list尾部插入值为val的元素
pop_back删除list中最后一个元素
insert在list position位置插入值为val的元素
erase删除list position位置的元素
swap交换两个list中的元素
clear清空list中的有效元素

 🥇 push_front

🥇 pop_front 

🥇 push_back 

🥇 pop_back  

🥇 insert

🥇 erase

🥇 swap

 

🥇 clear

list其他的操作,可以查看list的文档说明 。

6.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);
	}
}

总结

以上就是list容器的基本使用,希望可以帮助到大家,希望大家动动发财的小手点一下小赞,谢谢大家!!!!!!!


http://www.kler.cn/news/330025.html

相关文章:

  • 上海我店:创新模式引领本地生活新风尚
  • c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能
  • 大数据比懂知识点:Parquet、ORC还是Avro作为数据存储格式,哪种在性能和压缩率上更优
  • 【C++二分查找 前缀和】1712. 将数组分成三个子数组的方案数|2078
  • 深入解析开源大模型的GPU资源需求与优化策略
  • 程序员如何通过专业与软技能提升核心竞争力
  • 特权访问管理阻力最小的途径
  • 付费计量系统通用功能(9)
  • 企望制造ERP系统存在RCE漏洞
  • UniVue大版本更新:UniVue2.0.0-preview
  • 10月2日笔记(内网资源探测篇)
  • 前端的全栈混合之路Meteor篇:运行在浏览器端的数据库-MiniMongo介绍及其前后端数据实时同步示例
  • 矩阵系统源码搭建,OEM贴牌,源头技术开发
  • 前端的全栈混合之路Meteor篇:3.0新版本介绍
  • vscode使用yarn 启动vue项目记录
  • 一个好用的服务治理组件Sentinel
  • 利士策分享,行走•悟世•惜福: 旅行真谛
  • nginx常用的性能优化
  • Custom C++ and CUDA Extensions - PyTorch
  • 外部引入的 JavaScript 放置位置
  • SpringBoot 源码解读与自动装配原理结合Actuator讲解
  • 汽车发动机系统(ems)详细解析
  • 01.useStateWithLabel
  • Mybatis-Flex使用
  • MybatisPlus代码生成器的使用
  • linux kernel Gdb在线调试
  • 【论文笔记】Visual Instruction Tuning
  • 操作系统_名词_文件下载_反弹SHELL_防火墙绕过
  • Junit和枚举ENUM
  • CentOS 6文件系统