c++ list容器使用详解

list容器概念

list是一个双向链表容器,可高效地进行插入删除元素。

List 特点:

  • list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行++,但是不能这样操作迭代器:it+3
  • 使用时包含 #include <list>  

list对象的构造函数

list同样采用模板类实现,对象的默认构造形式:list<T> listT;  如:

  1. list<int> lstInt;            //定义一个存放int的list容器。
  2. list<float> lstFloat;        //定义一个存放float的list容器。
  3. list<string> lstString;       //定义一个存放string的list容器。

注意:尖括号内还可以设置指针类型或自定义类型

list对象的带参构造函数

方式一:list(beg,end);     //将[beg, end)区间中的元素拷贝给本身。

方式二:list(n,elem);      //构造函数将n个elem拷贝给本身。

方式三:list(const list &lst); //拷贝构造函数。

list<int> lstInt1;lstInt1.push_back(1);lstInt1.push_back(2);lstInt1.push_back(3);list<int> lstInt2(lstInt1.begin(),lstInt1.end());		//1 2 3 list<int> lstInt3(5,8);							//8 8 8 8 8list<int> lstInt4(lstIntA);						    //1 2 3 

list头尾的添加移除操作

list<int> lstInt;lstInt.push_back(1);lstInt.push_back(2);lstInt.push_back(3);lstInt.push_back(4);lstInt.push_back(5);lstInt.pop_front();lstInt.pop_front();lstInt.push_front(11);lstInt.push_front(12);lstInt.pop_back();lstInt.pop_back();
// lstInt    {12, 11, 3}

list数据的读取

  1. list.front();   //返回第一个元素。
  2. list.back();  //返回最后一个元素。
list<int> lstInt;lstInt.push_back(1);lstInt.push_back(2);lstInt.push_back(3);lstInt.push_back(4);lstInt.push_back(5);int iFront = lstInt.front();	//1int iBack = lstInt.back();		//5lstInt.front() = 11;			//11lstInt.back() = 19;			//19

list与迭代器

list<int> lstInt;lstInt.push_back(1);lstInt.push_back(3);lstInt.push_back(5);lstInt.push_back(7);lstInt.push_back(9);for (list<int>::iterator it=lstInt.begin(); it!=lstInt.end(); ++it){cout << *it;cout << " ";}for (list<int>::reverse_iterator rit=lstInt.rbegin(); rit!=lstInt.rend(); ++rit){cout << *rit;cout << " ";}

list的赋值

llist<int> lstIntA,lstIntB,lstIntC,lstIntD;lstIntA.push_back(1);lstIntA.push_back(3);lstIntA.push_back(5);lstIntA.push_back(7);lstIntA.push_back(9);lstIntB.assign(lstIntA.begin(),lstIntA.end());		//1 3 5 7 9lstIntB.assign(++lstIntA.begin(),--lstIntA.end());		//3 5 7lstIntC.assign(5,8);							//8 8 8 8 8lstIntD = lstIntA;							//1 3 5 7 9lstIntC.swap(lstIntD);						//互换

list的大小

list<int> lstIntA;lstIntA.push_back(1);lstIntA.push_back(2);lstIntA.push_back(3);if (!lstIntA.empty()){int iSize = lstIntA.size();		//3lstIntA.resize(5);			//1 2 3 0 0lstIntA.resize(7,1);			//1 2 3 0 0 1 1lstIntA.resize(5);			//1 2 3 0 0}

list的插入

list<int> listA;list<int> listB;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);listB.push_back(11);listB.push_back(12);listB.push_back(13);listB.push_back(14);listA.insert(listA.begin(), -1);		//{-1, 1, 2, 3, 4, 5}listA.insert( ++listA.begin(), 2, -2);	//{-1, -2, -2, 1, 2, 3, 4, 5}listA.insert(listA.begin() , listB.begin() , listB.end());	//{11, 12, 13, 14, -1, -2, -2, 1, 2, 3, 4, 5}for(list<int>::iterator it = listA.begin(); it!=listA.end(); it++){cout<< *it<<endl;}

list的删除

// demo 15-32
#include <list>
#include <vector>
#include <iostream>using namespace std;int main(void){//list 删除元素list<int> listA;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);//erase 的用法list<int>::iterator itBegin=listA.begin();++ itBegin;list<int>::iterator itEnd=listA.begin();++ itEnd;++ itEnd;++ itEnd;listA.erase(itBegin,itEnd);//此时容器lstInt包含按顺序的1, 4, 5三个元素。listA.erase(listA.begin());//此时容器lstInt包含按顺序的4, 5三个元素。listA.push_back(4); // 4, 5, 4listA.insert(listA.end(), 5, 4);  //4, 5, 4, 4, 4, 4, 4, 4/*remove 删除元素*///方式一  直接调用remove 方法//listA.remove(4);//方式二   遍历然后逐个删除for(list<int>::iterator it=listA.begin(); it!=listA.end(); ){if(*it == 4){it =listA.erase(it); //相当于执行了++}else {it++;}}for (list<int>::iterator it=listA.begin(); it!=listA.end(); ++it){cout << *it;cout << " ";}system("pause");return 0;
}

list的反向排列

  1. list.reverse();     //反转链表,比如list包含1, 2, 3, 4, 5五个元素,运行此方

        法后,list就包含5, 4, 3, 2, 1元素。

list<int> listA;listA.push_back(1);listA.push_back(2);listA.push_back(3);listA.push_back(4);listA.push_back(5);listA.reverse();			//5, 4, 3, 2, 1

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

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

相关文章

信安.网络安全.UDP协议拥塞

第一部分 如何解决UDP丢包问题 一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2 字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。 UDP 报文中每个…

开源简历生成器OpenResume

什么是 OpenResume &#xff1f; OpenResume 是一个功能强大的开源简历生成器和简历解析器。OpenResume 的目标是为每个人提供免费的现代专业简历设计&#xff0c;让任何人都能充满信心地申请工作。 OpenResume 有 5 个核心特点&#xff1a; 特征描述1. 实时UI更新当您输入简历…

技术实践|高斯集群服务器双缺省网关故障分析

导语&#xff1a;当前国产化数据库使用范围越来越广泛&#xff0c;在GaussDB数据库的使用过程中难免会遇到一些问题&#xff0c;有的问题是由于在安装过程中没有注意细节而产生的&#xff0c;多数隐患问题都是在特定场景下才会暴露出来&#xff0c;且暴露的时间未知&#xff0c…

2023年电子工程师大会暨第三届社区年度颁奖活动--【其利天下技术】

华秋电子发烧友将于2023年11月23日在深圳举办一场盛大的技术交流活动&#xff0c;即“2023年电子工程师大会暨第三届社区年度颁奖活动”。本次活动邀请了各大高校教授、企业高管、行业专家和电子工程师们齐聚一堂&#xff0c;围绕“开源硬件”、“OpenHarmony RISC-V”、“工程…

vue-pdf在vue框架中的使用

在components目录下新建PdfViewer/index.vue vue-pdf版本为4.3.0 <template><div :id"containerId" v-if"hasProps" class"container"><div class"right-btn"><div class"pageNum"><input v-m…

GPT-4充当“规划师、审计师”,颠覆性双层文生图表模型

DALL-E 3、Midjourney、Stable Diffusion等模型展现出了强大的创造能力&#xff0c;通过文本便能生成素描、朋克、3D、二次元等多种类型的高质量图片&#xff0c;但在生成科学图表&#xff08;柱状、直方、箱线、树状等&#xff09;方面却略显不足。 这是因为模型在生成图表时…

解锁安全与信任的双重礼遇!JoySSL证书买二送一,买三送二

JoySSL是业内领先的SSL证书提供商&#xff0c;致力于为网站提供最高水平的安全性。通过使用JoySSL证书&#xff0c;您的网站将获得强大的加密保护&#xff0c;确保用户的敏感信息在传输过程中得到安全加密&#xff0c;有效地抵御各种网络威胁。 为何选择JoySSL证书&#xff1f…

简单好用的轻量级思维导图:ClickCharts 激活for mac

ClickCharts是一款流程图和流程图绘制软件&#xff0c;它提供了直观的界面和丰富的工具&#xff0c;帮助用户轻松创建和编辑各种类型的图表和流程图。 以下是ClickCharts软件的一些主要功能和特点&#xff1a; 流程图绘制&#xff1a;ClickCharts允许用户创建各种类型的流程图…

ROS Turtlebot3多机器人编队导航仿真

文章目录 前言一、Gzazebo中加载多台Turtlebot3机器人二、RVIZ中加载多个Turtlebot3机器人三.多机器人编队导航总结 前言 前面已经实现了在gazebo仿真环境中机器人一字型编队、三角形编队、N字型编队等仿真&#xff0c;接下来考虑多机器人编队在编队行进过程中的避障问题&…

如何看待阿里云发布的全球首个容器计算服务 ACS?

如何看待阿里云发布的全球首个容器计算服务 ACS&#xff1f; 本文目录&#xff1a; 前言 一、什么是ACS 二、ACS 的核心特性 三、ACS 的关键技术 四、本期话题讨论 4.1、你如何看待容器计算服务 ACS 的发布&#xff1f; 4.2、你认为 ACS 的产品设计能降低企业使用 K8s的…

Uniapp矩阵评分组件

uniapp矩阵评分组件支持自定义图标、选择颜色、评分等级。 <template><view style"width: 100%;overflow: hidden;"><view class"flex-sub flex-table flex flex-direction-column":style"{ --table-border-color: tableBorderColor…

数据结构-插入排序+希尔排序+选择排序

目录 1.插入排序 插入排序的时间复杂度&#xff1a; 2.希尔排序 希尔排序的时间复杂度&#xff1a; 3.选择排序 选择排序的时间复杂度&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的…

PHP排序sort()、asort() 和 ksort() 的区别及用法

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Amazon EC2的出现,是时代的选择了它,还是它选择了时代

目录 Amazon EC2简介 友商云服务器对比&#xff08;Amazon VS Tencent&#xff09; 友商云服务器对比&#xff08;Amazon VS Alibaba&#xff09; Amazon 云服务器的绝对优势 Amazon EC2功能 Amazon EC2 Linux 实例入门 启动实例 连接到的实例 清除的实例 终止的实例…

【Linux】一

本文使用的是云服务器来获取Linux环境 (使用虚拟机同样可以学习使用命令), 并且介绍了常用的Linux 命令. 获取Linux环境 使用xshell连接到云服务器 1.新建会话 输入主机号(云服务器的外网ip) 2.输入用户名/密码 centos的用户名:root 密码就是在后台设置的 3.成功进入 ~描…

盛元广通开放实训室管理系统2.0

开放实训室管理系统是一种基于网络和数据库的实训室信息管理系统&#xff0c;旨在提高实训室的管理水平&#xff0c;实现实训资源的优化配置和高效利用。该系统通常包括用户管理、设备管理、课程管理、考核管理等功能模块&#xff0c;能够实现实训室的预约、设备借用、课程安排…

PDF/X、PDF/A、PDF/E:有什么区别,为什么有这么多格式?

PDF 是一种通用文件格式&#xff0c;允许用户演示和共享文档&#xff0c;无论软件、硬件或操作系统如何。多年来&#xff0c;已经创建了多种 PDF 子类型来满足各个行业的不同需求。让我们看看一些最流行的格式&#xff1a;PDF/X、PDF/A 和 PDF/E。 FastReport .net下载 PDF/X …

如何远程控制别人电脑进行技术支持?

怎么提供远程技术支持&#xff1f; “我朋友的电脑出了一些问题&#xff0c;问我是否可以远程控制他的电脑帮他解决。请问有什么办法能快速的远程控制别人的电脑进行故障排除呢&#xff1f;” 当电脑出问题时&#xff0c;多数情况下会采用电话沟通进行解决&#…

Nuxt3框架全局引用外部JS/CSS文件的相关配置方法

全局引入外部文件方法&#xff1a; 找到根目录下的nuxt.config.ts配置文件&#xff1b;然后如上图所示&#xff0c;在defineNuxtConfig配置对象下app选项节点下&#xff0c;head对象中即可配置全局需要的JS或CSS文件&#xff1b; // https://nuxt.com/docs/api/configuration/…

BetterDisplay Pro for Mac(显示器校准软件)

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 以下是BetterDisplay Pro的主要特点&#xff1a; - 显示器校准&#xff1a;可以根据不同的需求和环境…