【C++】---STL之list详解

【C++】---STL之list详解

  • 一、了解list的基本信息
  • 二、成员函数
    • 1、构造
    • 2、迭代器
    • 3、empty()
    • 4、size()
    • 5、front()
    • 6、back()
    • 7、push_front()
    • 8、pop_front()
    • 9、push_back()
    • 10、pop_back()
    • 11、insert()
    • 12、erase()
    • 13、swap()
    • 14、sort()
    • 15、reverse()

一、了解list的基本信息

1、库里面的list是一个带头双向循环链表结构!

2、优点:可以在任意位置进行插入删除,插入删除的效率比较高。

3、缺点:不支持任意位置的随机访问(因为物理空间不连续!)

二、成员函数

1、构造

在这里插入图片描述

explicit list (const allocator_type& alloc = allocator_type());	//构造空list
 
explicit list (size_type n, const value_type& val = value_type(),//构造一个有n个元素值为val的list
                const allocator_type& alloc = allocator_type());
 
template <class InputIterator>//构造一个list,值为InputIterator的first到last之间的元素
  list (InputIterator first, InputIterator last,
         const allocator_type& alloc = allocator_type());

2、迭代器

在这里插入图片描述
在这里插入图片描述

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

int main()
{
	list<int> lt1;


	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

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

在这里插入图片描述

3、empty()

在这里插入图片描述
在这里插入图片描述

4、size()

在这里插入图片描述

int main()
{
	list<int> lt1;


	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

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

	//cout << lt1.empty() << endl;

	cout << lt1.size()<<endl;

	return 0;
}

在这里插入图片描述

5、front()

在这里插入图片描述

int main()
{
	list<int> lt1;


	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	cout << lt1.front() << endl;

	return 0;
}

在这里插入图片描述

6、back()

在这里插入图片描述

int main()
{
	list<int> lt1;


	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	//cout << lt1.front() << endl;
	cout << lt1.back() << endl;
	return 0;
}

在这里插入图片描述

7、push_front()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_front(1);
	lt1.push_front(2);
	lt1.push_front(3);
	lt1.push_front(4);
	lt1.push_front(5);
	
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

8、pop_front()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_front(1);
	lt1.push_front(2);
	lt1.push_front(3);
	lt1.push_front(4);
	lt1.push_front(5);
	
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.pop_front();
	lt1.pop_front();
	lt1.pop_front();

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

9、push_back()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

10、pop_back()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.pop_back();
	lt1.pop_back();
	lt1.pop_back();

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

11、insert()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	list<int>::iterator pos = find(lt1.begin(), lt1.end(), 2);//在链表中查找值为2的元素,并返回它的迭代器

	lt1.insert(pos, 100);// 在pos位置之前插入100

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

12、erase()

在这里插入图片描述

改变底层的数据结构,迭代器失效:

int main()
{
	list<int> lt1;

	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	list<int>::iterator pos = find(lt1.begin(), lt1.end(), 3);// 擦除元素值为3的

	lt1.erase(pos);

	cout << *pos << endl;// pos的位置的元素的值已经被删除了。
	//此时如果不对pos的位置的迭代器进行重新赋值更新,那么pos就是一个野指针,非法访问。

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述
erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。因此删除list中任意位置上元素时,vs就认为该位置迭代器失效 了。

13、swap()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(5);

	list<int> lt2;

	lt2.push_back(1);
	lt2.push_back(1);
	lt2.push_back(1);
	lt2.push_back(1);
	lt2.push_back(1);

	cout << "lt1交换前:";
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;


	lt1.swap(lt2);// lt1 和 lt2内容进行交换

	cout << "lt1交换后:";
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

14、sort()

在这里插入图片描述
sort()函数默认是:排升序!

int main()
{
	list<int> lt1;

	lt1.push_back(4);
	lt1.push_back(3);
	lt1.push_back(5);
	lt1.push_back(1);
	lt1.push_back(2);


	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.sort();

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

15、reverse()

在这里插入图片描述

int main()
{
	list<int> lt1;

	lt1.push_back(4);
	lt1.push_back(3);
	lt1.push_back(5);
	lt1.push_back(1);
	lt1.push_back(2);


	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.sort();

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.reverse();

	for (auto e : lt1)
	{
		cout << e << " ";
	}
	return 0;
}

在这里插入图片描述


好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述

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

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

相关文章

windows查看xxx的版本号

node -v python --version redis-server --version java -version go version mvn -version git --version

【python】随机模拟——赶火车问题、醉汉回家

问题描述 1.赶火车问题。2.模拟二维随机游动&#xff08;醉汉回家&#xff09; 1.赶火车问题。 一列列车从A站开往B站&#xff0c;某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min&#xff0c;标准差为2min的正态随机变量。火车大约下午13&#…

Linux 深入理解Linux文件系统与日志分析

在Linux系统中&#xff0c;文件名和文件数据是分开存储的 文件数据包含 元信息(即不包含文件名的文件属性) 和 实际数据 文件元信息存储在 inode(索引节点)里&#xff0c; 文件实际数据存储在 block(块)里; 文件名存储在目录块里 查看文件的元信息 stat 文件名 [ro…

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion 基于函数计算FC2.0部署AI数字绘画stable-diffusion基于函数计算FC3.0部署AI数字绘画stable-diffusion总结 在经过了上一次曲线救国失败经历之后&#xff0c;失败经历参考博文&#xff1a;https://developer.aliyun.c…

C++ —— 继承

什么是继承&#xff1f; 继承是指一种代码可以被复用的机制&#xff0c;在一个类的基础上进行扩展&#xff0c;产生的新类叫做派生类&#xff0c;被继承的类叫基类。&#xff08;也可称为子类和父类&#xff09; 继承的写法&#xff1a; class B : 继承方式 A (…

MCU功耗测量

功耗测量 一、相关概念二、功耗的需求三、测量仪器仪表测量连接SMU功能SMU性能指标 四、功耗测量注意点板子部分存在功耗MCU方面&#xff0c;可能存在干扰项仪器仪表方面 一、相关概念 静态功耗和动态功耗&#xff1a;动态功耗为运行功耗&#xff0c;功耗测量注重每MHz下的功耗…

智能调度|AIRIOT智能车队管理解决方案

客运、货运、汽车租赁、出租运营等行业对车辆管理、车队管理以及司乘人员的管理方式&#xff0c;逐渐向数字化和智能化转型。传统的依赖人工调度、记录和跟踪的管理模式已经难以满足业务发展需要&#xff0c;存在如下痛点&#xff1a; 实时监控与定位功能弱&#xff1a;无法实时…

实验4 数字频率计

实验目的&#xff1a; 1、使用铆孔U7输出一个脉冲&#xff0c;频率不定。 2、使用铆孔V7测量脉冲频率&#xff0c;并在数码管上显示。 实验内容及步骤&#xff1a; 设计原理 测量频率的方法有很多&#xff0c;按照其工作原理分为无源测量法、比较法、示波器法和计数法等。…

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

aweraweg

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

​「Python绘图」绘制小猪佩奇

python 绘制小猪佩奇 一、预期结果 二、核心代码 import turtle print("开始绘制小猪佩奇") pen turtle.Turtle() pen.pensize(4) #pen.hideturtle()pen.speed(1000)pen.color("#ff9bc0","pink") pen.setheading(-30) pen.pu() pen.goto(-100,…

34. BI - 美国大学生足球队的 GCN 案例

本文为 「茶桁的 AI 秘籍 - BI 篇 第 34 篇」 文章目录 美国大学生足球队 Embedding&#xff08;GCN&#xff09; Hi&#xff0c;你好。我是茶桁。 在上一节课中&#xff0c;因为需要&#xff0c;我们先是回顾了一下 Graph Embedding&#xff0c;然后跟大家讲解了 GCN 以及其算…

代码随想录——双指针/滑动窗口(二)

一.最长连续递增序列 go语言 func max(a,b int) int{if a>b{return a}return b }func findLengthOfLCIS(nums []int) int {n:len(nums)maxlen:0for l:0;l<n;l{r:l1for r<n&&nums[r]>nums[r-1]{r}maxlenmax(r-l,maxlen)}return maxlen }cpp int findLengt…

为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍

文章目录 前言 1、为什么大模型训练需要GPU&#xff0c;而非CPU 2、现在都有哪些合适的GPU适合训练&#xff0c;价格如何 前言 今天偶然看到一篇关于介绍GPU的推文&#xff0c;我们在复现代码以及模型训练过程中&#xff0c;GPU的使用是必不可少的&#xff0c;那么大模型训练需…

软件测试(Web自动化测试)

一.自动化测试简介 1.自动化测试是一种把人工驱动的测试行为转化为机器执行的测试过程。 2.使用自动化测试需要满足的3个条件&#xff1a; &#xff08;1&#xff09;项目需求变动不频繁 &#xff08;2&#xff09;项目进度压力不大&#xff0c;时间不紧迫 &#xff08;3&…

python struct模块 处理字节流

首先看一下&#xff0c;struct 的字节顺序格式。 其次是struct的格式对照表。 下面是案例&#xff1a; 单项数据编解码 >>>struct.pack(i,379978) bJ\xcc\x05\x00 >>>struct.pack(>i,379978) b\x00\x05\xccJ解析&#xff1a; >>>struct.unpa…

5.组合与继承

1.面向对象 在C中&#xff0c;面向对象&#xff08;Object-Oriented&#xff09;是一种程序设计范式&#xff0c;它使用“对象”来设计应用程序和软件。面向对象编程&#xff08;OOP&#xff09;的核心概念包括类&#xff08;Class&#xff09;、对象&#xff08;Object&#x…

23.leetcode---从前序与中序中遍历二叉树(Java版)

题目链接: https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/submissions/518810727/ 代码: 测试:

建设数字化工厂系统需要哪些核心技术

随着工业4.0时代的来临&#xff0c;数字化工厂系统已成为制造业转型升级的关键所在。数字化工厂系统通过集成各种先进技术&#xff0c;实现生产过程的智能化、自动化和高效化&#xff0c;进而提升企业的竞争力。那么建设这样一个系统究竟需要哪些核心技术呢&#xff1f; 一、工…

如何创建网址静态码?二维码扫码跳转网址的方法

现在很多的网址链接需要转换成二维码之后来使用&#xff0c;比如印刷包装、宣传单、公众号等方面应用&#xff0c;用户可以通过扫码跳转到对应链接的页面&#xff0c;查看页面内容。那么想要将链接转换二维码&#xff0c;并且二维码长期有效&#xff0c;可以使用生成静态码的方…
最新文章