list的常用操作

list的介绍

list是序列容器,它允许在常数范围O(1)进行插入和删除在这段序列的任意位置,并且可以双向遍历

它是弥补vector容器的缺点,与vector有互补的韵味,

这里我们可以将其进行与vector进行对比

vector

(1)可以在序列内的任意位置随机访问,这样就很好的支持了二分查找,堆排序等

(2)头部和中间插入和删除的时候效率低,扩容的时候会多扩容空间,一定程度上浪费空间

list

(1)不支持在任意位置随机访问

(2)支持了在任意位置的插入和删除,并且是常数时间O(1)扩容是一个一个链接的不会存在多扩容空间

list的常见使用

list的操作有很多,这里我们只介绍一些比较常用的操作

(1)包头文件

要使用list向将头文件包上

#include<iostream>
#include<list>using namespace std;

(2)头插头删尾插尾删

list的底层是双向链表自然也就支持头插头删尾插尾删

建立list对象l后,我们就可以进行使用了

list <int> l;l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);l.push_front(0);l.pop_back();
l.pop_front();

(3)list的打印

list的遍历不能使用operator[]+下标进行遍历,其根本的物理结构不相同
list的遍历使用迭代器或则范围for进行遍历,其中范围for是编译器自动替换为迭代器iterator进行打印

list<int>::iterator it = l.begin();while (it != l.end()){cout << *it << " ";++it;}cout << endl;for (auto e : l){cout << e << " ";}cout << endl;

打印(2)中的结果如下

(4)反向打印迭代器

list的底层是双向循环列表,支持反向遍历打印

	list<int>::reverse_iterator rit = l.rbegin();while (rit != l.rend()){cout << *rit << " ";++rit;}cout << endl;

运行结果如下

(5)修改

在迭代器以及范围for中我们可以修改list中的值,如下

	list<int>::iterator it = l.begin();while (it != l.end()){*it += 1;cout << *it << " ";++it;}cout << endl;

结果如下

(6)仅打印print_list

void print_list(const list<int>& l)
{list<int>::const_iterator it = l.begin();while (it != l.end()){//*it += 1;不能更改cout << *it << " ";++it;}cout << endl;
}

这里更改的话,编译器会提示错误,原因是const类型的迭代器仅能读,不能写

结果如下

(7)赋值运算符=

	list<int> lt1;lt1.push_back(10);lt1.push_back(20);lt1.push_back(30);lt1.push_back(40);l = lt1;print_list(l);

打印结果为,可知l中的原值1,2,3被赋值为10,20,30,40

(8)查找,插入,删除

list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.push_back(4);
list<int>::iterator it = find(lt1.begin(),lt1.end(),3);
if (it != lt1.end())
{lt1.insert(it, 30);lt1.erase(it);
}

结果为,这里有的时候会涉及迭代器的失效,请期待下节

(9)排序

list<int> lt1;
lt1.push_back(3);
lt1.push_back(5);
lt1.push_back(1);
lt1.push_back(6);
lt1.push_back(2);
lt1.push_back(4);print_list(lt1);lt1.sort();

结果如下

到这里我们讲解完毕

如果对您有帮助的话点一个免费的赞和收藏叭!

由于作者水平不足,如有任何错误,请读者在评论区交流!

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

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

相关文章

机器人角度参考方式

机器人的角度可以根据需求和系统设计来决定。通常情况下&#xff0c;机器人角度&#xff08;如航向角或偏航角&#xff09;有两种常见的参考方式&#xff1a; 参考开机时的 0&#xff1a;这是最常见的方式&#xff0c;机器人在开机时会将当前的方向作为 0&#xff08;即参考方向…

Go语言封装Cron定时任务

Go语言封装Cron定时任务 介绍目标项目背景代码分析代码实现主要功能 Cron表达式解析例子 使用示例总结 介绍 在现代应用中&#xff0c;定时任务是非常常见的需求&#xff0c;无论是用于定时清理数据、定时发送邮件&#xff0c;还是定时执行系统维护任务。Go语言作为一门现代编…

3.4 stm32系列:定时器(PWM、定时中断)

一、定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能&#xff1b; 不精准的延迟&#xff1a; /* 微秒级延迟函数* 不精准* stm32存在压出栈过程需要消耗时间* 存在流水线&#xff0c;执行时间不确定…

28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强

A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法&#xff1a;无模型水下图像增强方法&#xff1a;基于深度学习的水下图像增强方法&#xff1a; 论文方法概述像素分布…

【路径规划】原理及实现

路径规划&#xff08;Path Planning&#xff09;是指在给定地图、起始点和目标点的情况下&#xff0c;确定应该采取的最佳路径。常见的路径规划算法包括A* 算法、Dijkstra 算法、RRT&#xff08;Rapidly-exploring Random Tree&#xff09;等。 目录 一.A* 1.算法原理 2.实…

java web springboot

0. 引言 SpringBoot对Spring的改善和优化&#xff0c;它基于约定优于配置的思想&#xff0c;提供了大量的默认配置和实现 使用SpringBoot之后&#xff0c;程序员只需按照它规定的方式去进行程序代码的开发即可&#xff0c;而无需再去编写一堆复杂的配置 SpringBoot的主要功能…

transformer用作分类任务

系列博客目录 文章目录 系列博客目录1、在手写数字图像这个数据集上进行分类1. 数据准备2. 将图像转化为适合Transformer的输入3. 位置编码4. Transformer编码器5. 池化操作6. 分类头7. 训练8. 评估总结流程&#xff1a;相关模型&#xff1a; 1、在手写数字图像这个数据集上进行…

实验四 综合数据流处理-Storm (单机和集群配置部分)

1.前期准备 &#xff08;1&#xff09;把docker和docker-compose给下载好 参考&#xff1a;基于docker-compose来搭建zookeeper集群-CSDN博客&#xff08;注意对于这篇文章下面配置zookeeper的内容&#xff0c;可以直接跳过&#xff0c;因为我们只需要看最上面下载docker-com…

前端开发 之 12个鼠标交互特效下【附完整源码】

前端开发 之 12个鼠标交互特效下【附完整源码】 文章目录 前端开发 之 12个鼠标交互特效下【附完整源码】七&#xff1a;粒子烟花绽放特效1.效果展示2.HTML完整代码 八&#xff1a;彩球释放特效1.效果展示2.HTML完整代码 九&#xff1a;雨滴掉落特效1.效果展示2.HTML完整代码 十…

ChatGPT与领域特定语言的集成

用ChatGPT做软件测试 领域特定语言&#xff08;Domain-Specific Language&#xff0c;DSL&#xff09;是一种编程语言&#xff0c;专门设计用于满足特定领域或问题领域的需求。它是一种定制的语言&#xff0c;通常包括特定领域的专业术语以及相应的语法规则。DSL的设计旨在让领…

linux系统编程(六)

1、线程 一个进程可以包含多个线程&#xff0c;同一程序中的所有线程会独立执行相同的程序&#xff0c;共享同一份全局内存区域&#xff08;初始化数据段、未初始化数据段、堆&#xff09;。 同样是执行并行任务&#xff0c;用子进程会有一些限制&#xff0c;比如&#xff1a…

Java设计模式 —— 【结构型模式】外观模式详解

文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部子系统的具体的细节&#xff0c;这…

基于Springboot + vue实现的汽车资讯网站

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

Html:点击图标链接发起QQ临时会话

我们在做前端开发的时候&#xff0c;会遇到用户需要点击一个图标可以发起QQ临时会话&#xff0c;这样不用添加好友也能沟通的&#xff0c;那我们就来看看如何实现这个功能&#xff1a; <a href"http://wpa.qq.com/msgrd?v3&uin你的QQ号码&siteqq&menuyes…

【后端面试总结】MySQL主从复制逻辑的技术介绍

MySQL主从复制逻辑的技术介绍 1. 基本概念 MySQL主从复制是一种数据库复制技术&#xff0c;用于将一个数据库服务器&#xff08;主服务器&#xff0c;Master&#xff09;上的数据更改同步到一个或多个其他数据库服务器&#xff08;从服务器&#xff0c;Slave&#xff09;上。…

echarts画风向杆

1.安装echarts 2.引入echarts 4.获取数据&#xff0c;转换数据格式 windProfile.title.text ${moment(time.searchTime[0], ‘YYYY-MM-DD HH:mm:ss’).format( ‘YYYY-MM-DD HH:mm’ )}-${moment(time.searchTime[1], ‘YYYY-MM-DD HH:mm:ss’).format(‘YYYY-MM-DD HH:mm’)…

Linux系统编程——理解系统内核中的信号捕获

目录 一、sigaction() 使用 信号捕捉技巧 二、可重入函数 三、volatile关键字 四、SIGCHLD信号 在信号这一篇中我们已经学习到了一种信号捕捉的调用接口&#xff1a;signal(),为了深入理解操作系统内核中的信号捕获机制&#xff0c;我们今天再来看一个接口&#xff1a;si…

HTTP、HTTPS和SOCKS5代理協議

一、HTTP代理協議 HTTP代理是最基礎、使用最廣泛的代理協議之一。它主要用於處理HTTP協議的數據請求&#xff0c;即流覽網頁時的數據傳輸。HTTP代理的工作原理相對簡單&#xff1a;當用戶向網站發送請求時&#xff0c;HTTP代理伺服器首先接收該請求&#xff0c;然後將其轉發給…

IEC104 协议 | 规约帧格式 / 规约调试

注&#xff1a;本文为 “ IEC104 协议” 相关文章合辑。 未整理去重&#xff0c;如有内容异常请看原文。 图片清晰度限于引文原状。 从零开始理解 IEC104 协议之一 ——104 规约帧格式 洪城小电工 IP 属地&#xff1a;江西 2020.06.10 00:30:54 前言 本文根据相关标准、本…

代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心没有套路&#xff0c;说白了就是常识性推导加上举反例 今天的内容比较简单 简单了解贪心是通过局部最优解反推全局最优解&#xff08;有经验成分&#xff09; 455.分发饼干 题目链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 讲解链接&#xff…