C++之list

目录

一、关于list

二、list相关函数

三、相关函数的使用

1、构造函数

2、push_back

3、迭代器

4、push_front

5、pop_back

6、insert

7、erase

关于迭代器失效问题

8、splice

9、remove

10、sort


一、关于list

list和string、vector一样,都是容器,都有很强的相似性,再学习完string和vector后,list应该也要能做到精准的使用

list实际是带头双向循环链表

二、list相关函数

三、相关函数的使用

list的使用和string、vector都差不多,下面就简单举一些样例理解即可

1、构造函数

一般都是第一种构造:无参构造


2、push_back

push_back尾插


3、迭代器

list不同于string、vector,不能用[]遍历,因为没有连续的存储空间,只能用迭代器遍历

如下:

当然支持迭代器就支持范围for,范围for底层就是迭代器

正向迭代器是上面演示的,反向迭代器用法一样:


4、push_front

push_front是头插(时间复杂度是O(1))


5、pop_back

pop_back是尾删

原本是4 3 2 1 尾删两次变为了4 3


6、insert

insert是插入数据

第一种是pos位置插入val

第二种是pos位置插入n个val

第三种是插入一个迭代器区间

并且insert和erase是与find结合起来使用的

同样和vector一样,find是在algorithm的头文件里包含的,find没有找到就会返回last,所以需要用if语句判断是否找到

即如下图,在2的前面插入20


7、erase

erase是删除数据

并且erase没有找到的话也是返回last,所以也要和insert一样,用if语句判断

如下图,删除2


关于迭代器失效问题

迭代器是类似指针的一个东西,迭代器失效是指对应的指针已经被销毁,而依然使用被销毁的那段空间

就如上面的insert迭代器就不失效,因为insert插入到2前面的位置,只是在链表中增加一个结点,并不改变他们的关系,并且指针指向的空间并没有被销毁

而erase 2 以后,就发生了迭代器失效的问题了,因为删除2,2结点的位置已经释放了,而指针依旧指向那个位置,如果继续使用,则会发生程序崩溃的问题,如下所示:

在pos位置已经删除2,相当于pos所指向的位置已经释放了,又继续使用pos,改变pos位置的值

这时一执行,就会报以下错误:

这就是典型的迭代器失效问题


8、splice

splice是转移数据

我们只列举第一种用法,是将x链表的内容转移到pos位置

有两个链表,一个链表l是1 2 3 4,一个链表r是5 6 7,我们找到l链表的pos位置,即第二个数据的位置,在该位置转移了整个r链表的数据,所以变为了1 5 6 7 2 3 4


9、remove

remove是删除值为val的数据

现在有一个链表是1 2 3 4 4 4,我们remove(4)

观察结果可知,remove是删除所有值为4的数


10、sort

sort是排序算法

在vector中我们说到过,头文件algorithm中也有sort算法,但为什么list需要自己给一个sort算法呢?

理由很简单,因为algorithm头文件中的sort只支持存储空间连续的容器,因为排序算法中的sort实际是快排,而list存储空间并不是,所以得自己实现

直接l.sort()即可,默认升序

而如果想排降序,则用sort的第二个用法,即传入仿函数函数

升序的仿函数是less,降序是greater,但是用greater时需要包含头文件functional

如下图所示,传入匿名对象即可:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性矩阵不等式(LMI)在控制理论中的应用

目录 (一)Matlab中的LMI处理工具包 (二)为什么LMI成为控制理论领域重要工具? (三)LMI在与Lyapunov不等式的关系 (1)线性矩阵不等式 (2)线性矩阵…

Redis 缓存过期淘汰策略

面试题: 生产上你们的redis内存设置多少?如何配置、修改redis的内存大小如果内存满了你怎么办redis清理内存的方式?定期出测除和惰性曲除了解过吗redis缓存淘太策略有哪些?分别是什么?你用那个?redis的LRU…

做机器视觉工程师,其实挺没意思的

3.康耐视VisionPro高级脚本系列教程-3.脚本编辑错误和运行错误调试方法,break和Contitinuee的差别_哔哩哔哩_bilibili 其实人生就是“有时有意思,有时没意思”。 心里有太多的不甘心,太多的苦水,是没法再吃学习的苦&#xff0c…

分库分表---理论

目录 一、垂直切分 1、垂直分库 2、垂直分表 3、垂直切分优缺点 二、水平切分 1、水平分库 2、水平分表 3、水平切分优缺点 三、数据分片规则 1、Hash取模分表 2、数值Range分表 3、一致性Hash算法 四、分库分表带来的问题 1、分布式事务问题 2、跨节点关联查询…

指针,动态内存分配

什么是指针 指针就是地址,地址就是内存单元的编号 指针变量,存放其他变量地址的变量 ,存放地址的变量 第2句话,修改i的值也不影响p的值,可以看下面的例子,p放的是地址,p的地址修改了&#xff…

阿里云通义千问向全社会开放,近期将开源更大参数规模大模型

9月13日,阿里云宣布通义千问大模型已首批通过备案,并正式向公众开放,广大用户可登录通义千问官网体验,企业用户可以通过阿里云调用通义千问API。 通义千问在技术创新和行业应用上均位居大模型行业前列。IDC最新的AI大模型评估报告…

TypeScript高级类型

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 映射类型(Mapped Types) 1. Readonly 2. Partial 3. Pick 4. Record 条件类型&#xf…

Mysql中group by 使用中发现的问题

当使用 MySQL 的 GROUP BY 语句时,根据指定的列对结果进行分组。在 GROUP BY 分组时,如果某个字段在分组中有多个不同的值,那么就会出现你提到的该字段一直在变化的情况。 这种情况通常是由于在 GROUP BY 中选择的字段与其他非聚合字段不兼容…

互联网医院App开发:构建医疗服务的技术指南

互联网医院App的开发是一个复杂而具有挑战性的任务,但它也是一个充满潜力的领域,可以为患者和医疗专业人员提供更便捷的医疗服务。本文将引导您通过一些常见的技术步骤来构建一个简单的互联网医院App原型,以了解该过程的基本概念。 技术栈选…

打印日志遇到的问题,logback与zookeeper冲突

在做项目时需要打印日志引入了logback打印日志,但是一直无法打印,于是一路查找原因。发现zookeeper中默认带的有个logback和我自己引入的logback版本冲突了,这样直接使用exclusions标签将zookeeper中自带的日志框架全部排除即可 按理说到这一…

Windows下防火墙端口配置

在电脑或者服务器上部署某个应用后,如果需要对外提供服务可能就需要在主机防火墙上设置开启需要的端口,那么具体怎样操作呢 1.打开windows防火墙 2.设置防火墙入站规则 如下图“高级安全Windows Defender 防火墙”页面,点击左侧“入站规则”…

离散数学 学习 之 一阶逻辑基本概念 (一 )

个体词可以 理解为主语 , 3 不是偶数 ,3 就是 个体常项 凡整数都能被 2 整除 , 整数就是 个体变项 上面的谓词是 ( 1 ) 是无理数 ( 2 ) 是有理数 ( 3 ) 与 同岁 &#xf…

机器人任务挖掘与智能超级自动化技术解析

本文为上海财经大学教授、安徽财经大学学术副校长何贤杰出席“会计科技Acctech应对不确定性挑战”高峰论坛时的演讲内容整理。何贤杰详细介绍了机器人任务挖掘与智能超级自动化技术的发展背景、关键技术和应用场景。 从本质来说,会计是非常适合智能化、自动化的。会…

JWT安全

JWT是什么? JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。 JWT全称JSON Web Token,是一种传输信息的标准,用于JSON对象在各方之间安全…

SQL7 查找年龄大于24岁的用户信息

描述 题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。 用户信息表:user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20…

Android性能优化之应用瘦身(APK瘦身)

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览2.1 apk组成 三、优化方向3.1 源代码3.1.1 代码混…

GDB的C++调试方法

本文记录基础的GDB调试过程,包含指令如下: 文章目录 准备编译文件GDB启动GDB开启代码行设置断点运行程序查看pc的指令查看监视的变量以及断点设置快照checkpoint实验1实验2 nextnextistepx/i $pcfinishinfo break 和 delete Numrefbreak col. if condit…

【操作系统】进程控制

进程控制:创建新进程,撤销已有进程,实现进程状态转换等。 原语:进程控制用的程序段。执行期间不允许中断,用"关中断"和"开中断"指令(特权指令)实…

创建java文件 自动添加作者、时间等信息 – IDEA 技巧

2023 09 亲测 文章目录 效果修改位置配置信息 效果 每次创建文件的时候,自动加上作者、时间等信息 修改位置 打开:File —> Settings —> Editor —> File and Code Templates —> includes —> FileHeader 配置信息 /*** author : Java…

zookeeper/HA集群配置

1.zookeep配置 1.1 安装4台虚拟机 (1)按照如下设置准备四台虚拟机,其中三台作为zookeeper,配置每台机器相应的IP,hostname,下载vim,ntpdate配置定时器定时更新时间,psmisc&#xff…