当前位置: 首页 > news >正文

[C++随笔录] list使用

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返回删除后的下一个节点的地址 -- 更新了itit = 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函数, 但其实还不如用库里的


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

相关文章:

[C++随笔录] list使用

list使用 构造函数insert && 迭代器push_back && pop_back && push_front && pop_fronterasesort && find && reverse list的底层结构就是 带头双向循环链表 构造函数 // 默认构造 list<int> lt; cout << "l…...

机器学习总结

对以下文章机器学习总结 什么是深度学习?最易懂的机器学习入门文章-CSDN博客 人工智能和机器学习之间的关系 人工智能是一个最宽泛的概念&#xff0c;是一个研究领域&#xff0c;同时也是一个实现目标&#xff0c;而机器学习则是实现这一目标的一类方法。深度学习只是机器学…...

【刷题笔记9.24】LeetCode:二叉树最大深度

LeetCode&#xff1a;二叉树最大深度 1、题目描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 二、思路与算法 如果我们知道了左子树和右子树的最大深度 lll 和 rrr&#xff0c;…...

投资理财知识分享:100个金融知识专业术语

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家分享一下投资理财知识方面100个金融知识专业术语&#xff0c;希望能帮助大家了解更多金融知识。 1. 股票&#xff1a;代表对一家公司所有权的证券。 2. 债券&#xff1a;公司或政府发行的借款证券。 3. 投资组合&#xff…...

【ESP8266+TM1650时钟数码管+DS3231模块】制作网络时钟

【ESP8266TM1650时钟数码管DS3231模块】制作网络时钟 所需元器件接线方式代码 所需元器件 ESP8266 NodeMCU——开发板TM1650时钟数码管——显示时钟DS3231模块——网络对时 接线方式 TM1650 SCL—>D1 SDA—>D2DS3231 SCL—>D1 SDA—>D2 代码 #include <NTP…...

手动安装Linux服务器JDK

JDK安装 1.首先下载、上传JDK压缩包 官网下载路径&#xff1a;https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html&#xff0c;下载之前建议先登录服务器&#xff0c;查询服务器类型&#xff0c;防止出现-bash: ./java: cannot execute binary fil…...

9月24日,每日信息差

今天是2023年09月24日&#xff0c;以下是为您准备的12条信息差 第一、米博发布无滚布洗地机升级7系V7Pro、Q7Pro 第二、我国首个投入商业开发的大型页岩气田产气量突破600亿立方米。该气田作为我国首个投入商业开发的大型页岩气田&#xff0c;累计产气量日前已突破600亿立方米…...

【Linux】详细介绍Linux重入不可重入带例子

在Linux中&#xff0c;重入性指的是一个函数可以安全地在同时被多个线程或进程调用时正确地执行。不可重入性则表示一个函数在被并发调用时可能会导致不确定的行为或数据损坏。 不可重入 以下是一些示例&#xff1a; 静态变量&#xff1a;当函数使用静态变量时&#xff0c;可…...

学术团体的机器人相关分会和机器人相关大赛的说明

1. 中国机械工程学会 &#xff08;机器人分会&#xff09; 2017年成立&#xff0c;地点 华中科技大学 &#xff1a;中国机械工程学会机器人分会在汉成立 (huanqiu.com) 链接&#xff1a;中国机械工程学会 (cmes.org) 侧重点&#xff1a;工业机械臂、工厂和物流相关的移动机…...

C# 并发编程

C# 并发编程是指在多个线程同时执行的情况下&#xff0c;有效地管理共享资源、避免竞态条件和确保线程安全的编程技术。C#提供了一些丰富的工具和库来支持并发编程&#xff0c;以下是一些重要的概念和技术&#xff1a; 线程和任务&#xff1a; C#通过System.Threading和System.…...

关于ClickHouse的表引擎和SQL操作

目录 前言&#xff1a; 一.表引擎 (严格区分大小写) 1.TinyLog引擎 2.Memory 3.MergeTree 二.Sql操作 clickhouse 和 mysql 的比较 1 create 2 Insert 3 Update 和 Delete 前言&#xff1a; 在学习使用clickhouse时&#xff0c;首先就要先认识它的一大特点就是表…...

rust字符串

标准库提供了String结构体表示字符串。 String实际上就是Vec<u8>的封装。唯一的不同是String的方法假定Vec<u8>中的二进制都是utf8编码的 pub struct String {vec: Vec<u8>, }一、定义String 1.使用new方法创建空字符串 let string String::new();2.使用…...

解析-BeautifulSoup

解析-BeautifulSoup 1.基本简介 1.BeautifulSoup简称:bs4 2.什么是Beatifulsoup?Beautifulsoup&#xff0c;和1xm1一样&#xff0c;是一个html的解析器&#xff0c;主要功能也是解析和提取数据 3.优缺点?缺点: 效率没有1xm1的效率高优点: 接口设计人性化&#xff0c;使用方…...

C++:数组

C中的数组是一种用于存储相同数据类型的元素的数据结构。以下是C数组的一些特点&#xff1a; 固定大小&#xff1a;数组在创建时需要指定其大小&#xff0c;而且无法在运行时改变大小。这意味着一旦数组被创建&#xff0c;其大小就是固定的&#xff0c;除非创建一个新的数组。 …...

结合Mockjs与Bus事件总线搭建首页导航和左侧菜单

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…...

模拟桌面自动整理, 先顶左,再顶上。

5 6 **##** ****#* ***##* #***** ***#** ##**** ##**** #***** #***** #***** #include<iostream> using namespace std; #define MAX 1024char a[MAX][MAX]; void H(char arr[][MAX], int n,int idx) {//n列数 ,idx 某行int left 0;int right n - 1;char t;while (…...

新增MariaDB数据库管理、支持多版本MySQL数据库共存,1Panel开源面板v1.6.0发布

2023年9月18日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.6.0版本。 在这个版本中&#xff0c;1Panel新增MariaDB数据库管理&#xff1b;支持多版本MySQL数据库共存&#xff1b;支持定时备份系统快照和应用商店中已安装应用&#xff1b;支持为防火墙…...

【dbeaver】win环境的kerberos认证和Clouders集群中Kerberos认证使用Dbeaver连接Hive和Phoenix

一、下载驱动 cloudera官网 1.1 官网页面下载 下载页面 的Database Drivers 挑选比较新的版本即可。 1.2 集群下载 Hive可能集群没有驱动包。驱动包名称&#xff1a;HiveJDBC42.jar。41结尾的包也可以使用的。注意Jar包的大小一定是十几MB的。几百KB的是thin包不可用。 …...

MongoDB索引

索引支持在MongoDB中高效执行查询。如果没有索引&#xff0c;MongoDB必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引&#xff0c;MongoDB将使用该索引来限制它必须扫描的文档数。 尽管索引提高了查询性能&#xff0c;但添加索引对写入操作的性能有负面影响…...

ChatGPT的问世给哪些行业带来了冲击?

目录 引言Chat GPT 对行业的影响在线客服和智能客服行业传统自动回复机器人的局限性Chat GPT 的提升能力 教育培训行业个性化学习需求的挑战Chat GPT 的个性化优势 金融保险行业客户服务的变革Chat GPT 的智能化应用 医疗健康领域自助诊断及咨询的便利性Chat GPT 在医疗领域的应…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...