[C++随笔录] list使用

news2024/12/23 12:11:09

list使用

  • 构造函数
  • insert && 迭代器
  • push_back && pop_back && push_front && pop_front
  • erase
  • sort && find && reverse

list的底层结构就是 带头双向循环链表

构造函数

// 默认构造
list<int> lt;
cout << "lt->";
for (auto it : lt)
{
	cout << it << " ";
}
cout << endl;

// 用n个val来进行初始化
list<int> lt1(10);
cout << "lt1->";
for (auto it : lt1)
{
	cout << it << " ";
}
cout << endl;

list<int> lt2(10, 1);
cout << "lt2->";
for (auto it : lt2)
{
	cout << it << " ";
}
cout << endl;

// 迭代器区间进行初始化
list<int> lt3(lt2.begin(), lt2.end());
cout << "lt3->";
for (auto it : lt3)
{
	cout << it << " ";
}
cout << endl;

// 拷贝构造
list<int>lt4 = lt3;
cout << "lt4->";
for (auto it : lt4)
{
	cout << it << " ";
}
cout << endl;

运行结果:

lt->
lt1->0 0 0 0 0 0 0 0 0 0
lt2->1 1 1 1 1 1 1 1 1 1
lt3->1 1 1 1 1 1 1 1 1 1
lt4->1 1 1 1 1 1 1 1 1 1

insert && 迭代器



看来list并没有 重载 + 运算符
但是重载了++


list<int> lt2(10, 1);
cout << "lt2->";
for (auto it : lt2)
{
cout << it << " ";
}
cout << endl;

cout << "插入->";
lt2.insert(lt2.begin()++, 10);
for (auto it : lt2)
{
	cout << it << " ";
}
cout << endl;

运行结果:

lt2->1 1 1 1 1 1 1 1 1 1
插入->10 1 1 1 1 1 1 1 1 1 1

如果, 我们想要在 第五个位置进行插入该怎么办?

list<int> lt2(10, 1);
cout << "lt2->";
for (auto it : lt2)
{
cout << it << " ";
}
cout << endl;

// 先找到下标为5的迭代器
auto it = lt2.begin();
for (int i = 0; i < 5; i++)
{
	++it;
}

list<int>::iterator c = lt2.insert(it, 50);
cout << "插入->";
for (auto it : lt2)
{
	cout << it << " ";
}
cout << endl;

cout << "insert返回值的解引用->" << * c << endl;

运行结果:

lt2->1 1 1 1 1 1 1 1 1 1
插入->1 1 1 1 1 50 1 1 1 1 1
insert返回值的解引用->50

list迭代器遍历时,while循环的判断条件只能是!=,不能是<

list<int> lt2(10, 1);
cout << "lt2->";
for (auto it : lt2)
{
cout << it << " ";
}
cout << endl;

// 迭代器遍历
list<int>::iterator it = lt2.begin();
cout << "迭代器遍历->";
while (it != lt2.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;

运行结果:

lt2->1 1 1 1 1 1 1 1 1 1
迭代器遍历->1 1 1 1 1 1 1 1 1 1

push_back && pop_back && push_front && pop_front

	list<int> lt2(5, 1);
	cout << "lt2->";
	for (auto it : lt2)
	{
		cout << it << " ";
	}
	cout << endl;


	lt2.pop_back();
	lt2.pop_back();
	lt2.pop_back();
	lt2.pop_back();
	cout << "尾删->";
	for (auto it : lt2)
	{
		cout << it << " ";
	}
	cout << endl;

	lt2.push_back(13);
	lt2.push_back(30);
	lt2.push_back(45);
	lt2.push_back(6);
	lt2.push_back(60);
	lt2.push_back(5);
	lt2.push_back(7);
	cout << "尾插->";
	for (auto it : lt2)
	{
	cout << it << " ";
	}
	cout << endl;


	lt2.pop_front();
	lt2.pop_front();
	lt2.pop_front();
	lt2.pop_front();
	lt2.pop_front();
	cout << "头删->";
	for (auto it : lt2)
	{
		cout << it << " ";
	}
	cout << endl;


	lt2.push_front(25);
	lt2.push_front(55);
	lt2.push_front(9);
	lt2.push_front(6);
	lt2.push_front(20);
	cout << "头插->";
	for (auto it : lt2)
	{
		cout << it << " ";
	}
	cout << endl;

运行结果:

lt2->1 1 1 1 1
尾删->1
尾插->1 13 30 45 6 60 5 7
头删->60 5 7
头插->20 6 9 55 25 60 5 7

erase

// 删除lt2中的所有奇数
auto it = lt2.begin();
while (it != lt2.end())
{
	if ((*it) % 2 == 1)
	{
		// erase返回删除后的下一个节点的地址 -- 更新了it
		it = lt2.erase(it); 
	}
else
	{
		// 不是奇数, 那就++
		it++;
	}
}
cout << "删除所有奇数->";
for (auto it : lt2)
{
cout << it << " ";
}
cout << endl;

运行结果:

lt2->1 1 1 1 1 1 13 30 45 6
删除所有奇数->30 6

但是我们需要注意: erase的形参是不能再使用的, 切记!切记!

sort && find && reverse

当我们调用 算法库中的sort:


🗨️这是怎么一回事?

  • 其实, 迭代器可以按照性质(有底层结构决定)来进行划分:
    单向迭代器 – – 可以进行 ++
    比如: forward_list/ unordered_map/ unordered_set
    双向迭代器 – – 可以进行 ++/ –
    比如: list/ map/ set
    随机迭代器 – – 可以进行+/ - / ++/ –
    比如: vector/ deque/ string


但是std::sort的迭代器使用的是 随机迭代器类型 ⇒ 故 list不能使用算法库中的sort算法

但list类中自带sort算法👇👇👇

//sort(lt2.begin(), lt2.end());
lt2.sort();
cout << "升序->";
for (auto e : lt2)
{
	cout << e << " ";
}
cout << endl;

lt2.sort(greater<int>());
cout << "降序->";
for (auto e : lt2)
{
	cout << e << " ";
}
cout << endl;

运行结果:

升序->1 5 6 7 13 30 45 60
降序->60 45 30 13 7 6 5 1

温馨提示:

list自带的排序很慢的, 小数据量(<10万)的可以用用,
但大数据量还不如 将数据拷贝到vector中, vector排好序之后, 再将结果拷贝回去快
使用好 对应的容器, 对效率来说很重要的

find函数list并没有, 但是可以用算法库中的

list函数自带reverse函数, 但其实还不如用库里的


学须反己。若徒责人,只见得人不是,不见自己非。若能反己,方见自己有许多未尽处,奚暇责人? — — 王阳明
译: 有位朋友经常因为生气而指责别人。王阳明告诫他说:“学习应该反身自省。如果只去指责别人,就只能看到别人的错误,就不会看到自己的缺点。若能返身自省,才能看到自己有许多不足之处,哪还有时间去指责别人?
舜的弟弟叫象,象屡次想害死舜,但舜还是照样疼他。王阳明说,舜之所以能感化象的傲慢,最主要的就是舜不去看象的不是。如果舜坚决要去纠正象的奸恶,只会看到象的不是,而象又是一个傲慢的人,肯定不会认错,舜又岂能感化他?” 这位朋友听了这番话,甚感惭愧。

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

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

相关文章

PyQt5 自定义开关按钮(2)

效果展示 代码展示 from PyQt5.QtCore import Qt, pyqtSignal, QTimer, QRectF, QRect from PyQt5.QtGui import QFont, QColor, QPainter, QPainterPath from PyQt5.QtWidgets import QWidgetclass SwitchBtn(QWidget):clicked = pyqtSignal(bool)# 组件常量BORDER_WIDTH = 4…

【LeetCode-简单题】501. 二叉搜索树中的众数

文章目录 题目方法一&#xff1a;暴力哈希方法二&#xff1a;利用二叉搜索树的特性&#xff08;递归双指针&#xff09; 题目 方法一&#xff1a;暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …

世界前沿技术发展报告2023《世界信息技术发展报告》(五)先进计算技术

&#xff08;五&#xff09;先进计算技术 1. 概述2. 超级计算机2.1 美国首台E级超级计算机Crusher上线试运行2.2 欧洲最强大的超级计算机落成2.3 美国英伟达与微软公司联合开发人工智能超级计算机 3. 新型计算技术3.1 中国北京航空航天大学提出“混合概率逻辑计算”机制3.2 奥地…

港联证券:绿柱成交量放大什么意思?

这是许多股民常常遇到的问题。股票的价格涨跌往往与它的成交量有着紧密的联络&#xff0c;而绿柱扩展也意味着股票的成交量在上升&#xff0c;这或许是功德&#xff0c;也或许是坏事。本文将从不同角度评论绿柱成交量扩展的意义。 首要&#xff0c;关于绿柱扩展的情况&#xf…

负载均衡器监控

什么是负载均衡器 负载均衡建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行&#xff0c;例如Web服务器、FTP服务器、企…

MySQL数据库入门到精通7--进阶篇( InnoDB引擎)

6. InnoDB引擎 6.1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在 8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff0…

centos 6使用yum安装软件

1. 执行以下命令&#xff0c;查看当前操作系统 CentOS 版本。 cat /etc/centos-release返回结果如下图所示&#xff0c;则说明当前操作系统版本为 CentOS 6.9。 2. 执行以下命令&#xff0c;编辑 CentOS-Base.repo 和CentOS-Epel.repo文件。 vim /etc/yum.repos.d/CentOS-Bas…

三极管和MOS管抗静电?|深圳比创达EMC

抗静电为什么是三极管优于MOS&#xff1f;那么三极管和MOS管抗静电&#xff1f;接下来就跟着深圳比创达EMC小编一起来看下吧&#xff01; 首先要了解电子元件的特性&#xff0c;三极管是电流驱动元件&#xff0c;MOS管是电压驱动元件&#xff0c;为什么说MOS管用手触摸容易坏&a…

SpringAOP入门案例

package com.elf.spring.aop.aspectj; /*** author 45* version 1.0*/ public interface UsbInterface {public void work(); }package com.elf.spring.aop.aspectj; import org.springframework.stereotype.Component; /*** author 45* version 1.0*/ Component //把Phone对象…

如何快速提高沃尔玛、亚马逊产品的权重和销量,自养号测评的重要性!

据沃尔玛最新财报显示&#xff0c;其第二季度营业收入达到1616亿美元&#xff0c;同比增长5.74%&#xff1b;第二季度净利润约为79亿美元&#xff0c;同比增长53%。其中&#xff0c;沃尔玛在美国电商业务销售额同比增长24%。 其用户忠诚度也很较高&#xff0c;沃尔玛每月独立访…

Linux - Python安装

准备 openssl下载 python3下载 openssl安装目录&#xff1a;/usr/local/openssl python安装目录&#xff1a;/usr/local/python 将下载的文件上传至上面目录 部署 openssl安装 cd /usr/local/openssl tar -zxvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --pref…

公网远程访问GeoServe Web管理界面【内网穿透】

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

蓝桥杯备赛-上学迟到

上学迟到 P5707 【深基2.例12】上学迟到 - 洛谷 |https://www.luogu.com.cn/problem/P5707 题目介绍 题目描述 学校和 yyy 的家之间的距离为 s 米&#xff0c;而 yyy 以v 米每分钟的速度匀速走向学校。 在上学的路上&#xff0c;yyy 还要额外花费 1010 分钟的时间进行垃圾分…

RHCE---时间/远程连接服务器

文章目录 目录 文章目录 前言 一.安装时间服务器软件 初始化系统 二.配置时间服务器的服务端 三.配置时间服务器的客户端 四.远程连接服务器 前言 Linux中的时间服务器是指NTP服务器&#xff0c;NTP是Network Time Protocol的缩写&#xff0c;即网络时间协议。NTP服务器可以…

工业互联网:数字化革命的引擎

工业互联网&#xff0c;作为数字化革命的引擎&#xff0c;正以前所未有的速度和力度改变着我们的世界。这一概念不再局限于企业内部的信息技术应用&#xff0c;而是将互联网、大数据、人工智能等技术深度融入到制造业、能源、交通、农业等各个领域&#xff0c;实现了设备、系统…

竞赛选题 基于深度学的图像修复 图像补全

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-se…

项目管理中,产品经理如何合理分配任务?

大部分工作在软件行业中的分配是明确的&#xff0c;例如开发人员负责编写代码&#xff0c;产品经理负责编写文档&#xff0c;设计师负责绘制图形。然而&#xff0c;仍有一部分工作并不明确由谁负责。无论是产品经理还是开发人员都可以完成这些工作。 如果产品经理不擅长分配任…

【算法基础】数组和链表

目录 1 数组&#xff08;Array&#xff09; 1.1 定义和特点 1.2 基本操作 1.3 数组的时间复杂度 1.4 应用场景 2 链表&#xff08;Linked List&#xff09; 2.1 定义和特点&#xff1a; 2.1.1 单向链表&#xff08;Singly Linked List&#xff09; 2.1.2 双向链表&…

【iOS】引用计数与autorelease

文章目录 前言一、什么是自动引用计数二、内存管理/引用计数三、内存管理的思考方式四、release与autorelease五、赋值的引用计数 前言 最近在学习iOS内存管理之引用计数&#xff0c;特此撰写博客记录学习过程 一、什么是自动引用计数 自动引用计数&#xff08;ARC&#xff0…

在支付宝小程序上websocket实现mqtt协议连接服务器控制硬件

概述 支付宝小程序作对外开放&#xff0c;有许许多多的好玩的地方&#xff0c;那么本文就在支付宝小程序上websocket实现mqtt协议连接服务器控制智能硬件&#xff01;&#xff01; 详细 一、前言&#xff1b; 那么本系列连载的博文&#xff0c;都是围绕着 支付宝小程序如何实…