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 8
	list<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();	//1
	int iBack = lstInt.back();		//5
	lstInt.front() = 11;			//11
	lstInt.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 9
    lstIntB.assign(++lstIntA.begin(),--lstIntA.end());		//3 5 7

	lstIntC.assign(5,8);							//8 8 8 8 8
	lstIntD = lstIntA;							//1 3 5 7 9
	lstIntC.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();		//3
		lstIntA.resize(5);			//1 2 3 0 0
		lstIntA.resize(7,1);			//1 2 3 0 0 1 1
		lstIntA.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, 4
	listA.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析思维与模型:群组分析法

群组分析法&#xff0c;也称为群体分析法或集群分析法&#xff0c;是一种研究方法&#xff0c;用于分析和理解群体内的动态、行为模式、意见、决策过程等。这种方法在社会科学、心理学、市场研究、组织行为学等领域有广泛应用。它可以帮助研究人员或组织更好地理解特定群体的特…

算法通关村第十六关白银挑战——滑动窗口高频问题

关注微信公众号&#xff1a;怒码少年。回复关键词【电子书】&#xff0c;领取多本计算机相关电子书 公众号后台开启了咨询业务&#xff0c;欢迎大家向我提问&#xff0c;免费&#xff0c;为爱发电&#x1f60e; 大家好&#xff0c;我是怒码少年小码。 武汉今天真的超级冷&…

kubenetes-Service和EndpointSlice

一、Service 二、Endpoint Endpoint记录一个 Service 对应一组 Pod 的访问地址&#xff0c;一个 Service 只有一个 Endpoint资源。Endpoint资源会去监测Pod 集合&#xff0c;只要服务中的某个 Pod 发生变更&#xff0c;Endpoint 就会进行同步更新。 三、Service、Endpoint和 P…

Linux 网络:PMTUD 简介

文章目录 1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程 3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTU 处理3.2.2 转发过程中 PMTUD 处理 4. PMTUD 观察5. 参考链接 1. 前…

MattML

方法 作者未提供代码

SPASS-偏相关分析

基本概念 偏相关分析的任务就是在研究两个变量之间的线性相关关系时控制可能对其产生影响的变量,这种相关系数称为偏相关系数。偏相关系数的数值和简单相关系数的数值常常是不同的,在计算简单相关系数时,所有其他自变量不予考虑。 统计原理 控制一个变量和控制两个变量的偏…

【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制&#xff1a; 1. 注意力权重矩阵可视化&#xff08;矩阵热图&#xff09;a. 导入必要的库b. 可视化矩阵热图&#xff08;show_heatmaps&#xff0…

公网访问全能知识库工具AFFINE,Notion的免费开源替代

文章目录 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品 前言 AFFiNE 是一个…

C++ 运算符重载详解

本篇内容来源于对c课堂上学习内容的记录 通过定义函数实现任意数据类型的运算 假设我们定义了一个复数类&#xff0c;想要实现两个复数的相加肯定不能直接使用“”运算符&#xff0c;我们可以通过自定义一个函数来实现这个功能&#xff1a; #include <iostream> using…

Backtrader绘图cerebro.plot报错问题的处理

Backtrader绘图cerebro.plot报错问题的处理 1.问题描述 在jupyter 中使用BackTrader &#xff0c;使用绘图功能时&#xff1a; cerebro.plot() 提示错误&#xff1a;ValueError: Axis limits cannot be NaN or Inf 由于backtrader 要求有7列数据&#xff0c;最后一列openint…

图像分类(六) 全面解读复现MobileNetV1-V3

MobileNetV1 前言 MobileNetV1网络是谷歌团队在2017年提出的&#xff0c;专注于移动端和嵌入设备的轻量级CNN网络&#xff0c;相比于传统的神经网络&#xff0c;在准确率小幅度降低的前提下大大减少模型的参数与运算量。相比于VGG16准确率减少0.9%&#xff0c;但模型的参数只…

【MySQL--->视图】

文章目录 [TOC](文章目录) 一、概念二、操作三、视图特性 一、概念 视图是一个由插叙结果组成的虚拟表,基于表查询结果得到的表叫做视图,被查询的表叫做基表.基表和视图进行更新操作会互相影响. 二、操作 创建视图 将dept和emp两个基表的查询结果作为视图 更新基表会影响视…

使用百度翻译API或腾讯翻译API做一个小翻译工具

前言 书到用时方恨少&#xff0c;只能临时抱佛脚。英文pdf看不懂&#xff0c;压根看不懂。正好有百度翻译API和腾讯翻译API&#xff0c;就利用两个API自己写一个简单的翻译工具&#xff0c;充分利用资源&#xff0c;用的也放心。 前期准备 关键肯定是两大厂的翻译API&#x…

算法通关村第十一关-青铜挑战理解位运算的规则

大家好我是苏麟 , 今天聊聊位运算 . 位运算规则 计算机采用的是二进制&#xff0c;二进制包括两个数码:0&#xff0c;1。在计算机的底层&#xff0c;一切运算都是基于位运算实现的&#xff0c;所以研究清整位运算可以加深我们对很多基础原理的理解程度。 在算法方面&#xf…

Python基础:错误和异常

在Python中的错误可&#xff08;至少&#xff09;被分为两种&#xff1a;语法错误和 异常&#xff0c;均是指在程序中发生的问题和意外情况。Python提供了异常处理机制&#xff0c;使程序能够更容易地应对这些问题。 1. 语法错误&#xff08;Syntax Error&#xff09; 语法错误…

4种经典的限流算法

0、基础知识 1000毫秒内&#xff0c;允许2个请求&#xff0c;其他请求全部拒绝。 不拒绝就可能往db打请求&#xff0c;把db干爆~ interval 1000 rate 2&#xff1b; 一、固定窗口限流 固定窗口限流算法&#xff08;Fixed Window Rate Limiting Algorithm&#xff09;是…

三相异步电机动态数学模型及矢量控制仿真

文章目录 三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接需要仿真的同学请关注【Qin的学习营地】 三相…

Node.js之fs文件系统模块

什么是fs文件系统模块&#xff1f;又如何使用呢&#xff1f;让我为大家介绍一下&#xff01; fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对文件的操作需求 注意&#xff1a;如果要在JavaScript代码中&#xff0c…

OS 进程同步

基本概念 定义&#xff1a;把异步环境下的一组并发进程因直接制约而相互发送消息、相互合作、相互等待&#xff0c;使得各进程按一定的速度执行的过程&#xff0c;称为进程同步 协作进程&#xff1a;具有同步关系的一组并发进程 进程同步机制的主要任务&#xff1a;在执行次…