C++之list

2023-09-13 20:15:36

目录

一、关于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

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

更多推荐

【洛谷 P1364】医院设置 题解(图论+深度优先搜索)

医院设置题目描述设有一棵二叉树,如图:其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为111。如上图中,若医院建在111处,则距离和=4+12+2×20+2×40=136=4+12+2\times20+2\ti

分布式调度 Elastic-job

分布式调度Elastic-job1.概述1.1什么是任务调度我们可以思考一下下面业务场景的解决方案:某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算前一天的财务数据,统计汇总以上场景就是任务调度所需要解决的问题任务调

“混合”引擎为通用子模块提供动力,实现嵌入式I / O灵活性

现成的组件对于嵌入式开发工程师而言并不是什么新鲜事物。但是,实际上没有人期望一种“一刀切”的解决方案,尤其是在涉及复杂的I/O要求的情况下。但是,基于流行的夹层卡格式的具有成本效益的现场可编程门阵列(FPGA)技术的新实现正在“针对VME,PCI,CompactPCI和VME提供可承受的标准硬件和自由形式的I/O多功能

Mac FoneLab for Mac:轻松恢复iOS数据,专业工具助力生活

如果你曾经不小心删除了重要的iOS数据,或者因为各种原因丢失了这些数据,那么你一定知道这种痛苦。现在,有一个名为MacFoneLab的Mac应用程序,它专门设计用于恢复iOS数据,这可能是你的救星。MacFoneLabforMac是一种强大的工具,它可以帮助你恢复各种类型的iOS数据,包括照片、视频、联系人、短信、通话

Vulnhub实战-DC9

前言本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。一、信息收集对目标网络进行扫描arp-scan-l对目标进行端口扫描nmap-sC-sV-oAdc-9192.168.1.131扫描出目标开放了22和80两个端口,访问目标的80端口。对目标进行目录扫描与分析。

大数据课程M2——ELK的ELASTICSEARCH概述

文章作者邮箱:yugongshiye@sina.cn地址:广东惠州▲本章节目的⚪了解ELK的ELASTICSEARCH概括;⚪掌握ELK的ELASTICSEARCH核心概念;一、ELASTICSEARCH概括1.ES安装和启动注意:如果使用达内云主机,无需安装es,直接配置yml启动即可。1.安装下载ES最新版本的安装

iOS xcframework项目提示“ld: framework not found”

iOSxcframework项目提示“ld:frameworknotfound”问题描述公司有一个项目,同时引用了.framework和.xcframework,但是使用xcode编译的时候,xcodebuildarchive-project${project_Name}.xcodeproj-target${targe

FreeRTOS移植以及核心功能

文章目录freertos和ucos区别,优缺点比较移植步骤核心功能内存管理(5种内存管理策略)FreeRTOS任务调度算法有三种时间管理通信管理栈管理freertos和ucos区别,优缺点比较FreeRTOS(FreeReal-TimeOperatingSystem)和uC/OS(Micro-controllerOpe

使用Leaflet对WMS做空间几何范围查询

一、需求使用GeoServer发布的WMS服务对WMS做空间范围查询,默认情况下WMS支持点击查询,网上有很多的资料不在赘述。那么WMS做几何查询该怎么实现呢?二、实现路径查询WMS查询的服务参数,WMS支持三种请求方式:GetCapabilities、GetMap、GetFeatureInfo。其中GetCapabi

Transaction - 记一次 Spring 事务联合 Redis 挂了引发的生产事故

问题描述java.lang.RuntimeException:java.lang.IllegalStateException:Alreadyvalue[…数据源信息…]boundtothread[[Ljava.lang.String;@231b1ae0.container-0-C-1]上述问题是本次问题的最终结果,但并

springboot和vue:二、springboot特点介绍+热部署热更新

springboot特点介绍能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件。提供定制化的启动器Starters,简化Maven配置,开箱即用。纯Java配置,没有代码生成,也不需要XML配置。提供了生产级的服务监控方案,如安全监控、应用监控、健康检测等。热部署热更新SpringBoot提供了spri

热文推荐