C++ —— 关于list

目录

链接

前言

1. 迭代器浅解

2. 接口

2.1 构造函数 

 2.2 push_back

2.3 emplace_back

2.4 insert

 2.5 erase 

 2.6 reverse 

2.7 sort

2.8 merge

 2.9 unique

 2.10 splice


链接

cplusplus.com/reference/list/list/?kw=listicon-default.png?t=O83Ahttps://cplusplus.com/reference/list/list/?kw=list


前言

list的结构其实就是一个 "带头双向循环链表",与string和vector相比,list不支持下标+[]的访问,因为链表是由一个节点一个节点连接而成的,空间并不是连续的


 

1. 迭代器浅解

 

不同性质的迭代器所支持的功能也不同,这是因为底层结构所决定的 

 如果我们使用不匹配的迭代器就会出错,比如sort就只能使用随机迭代器,因为其底层函数需要进行 - 的操作,如果是其它迭代器就会报错

list<int> lt(5, 1);
//错误,sort函数的底层要求使用随机迭代器类型
sort(lt.begin(), lt.end());

 


2. 接口

2.1 构造函数 

//n个val构造
list<int> lt(5, 1);//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;


 2.2 push_back

push_back只能尾插单个数据,无法直接插入(3,3)这样类型的函数

//n个val构造
list<int> lt(5, 1);lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}

 

list<A> lt;A aa1(1, 1);lt.push_back(aa1);//匿名对象lt.push_back(A(2,2));//报错//lt.push_back(3, 3);

 


2.3 emplace_back

也是尾插函数,但是emplace_back可以直接插入(3,3)这样的数据

void test_list2()
{list<A> lt;A aa1(1, 1);lt.push_back(aa1);lt.push_back(A(2,2));//lt.push_back(3, 3);lt.emplace_back(aa1);lt.emplace_back(A(2,2));cout << endl;// 支持直接传构造A对象的参数emplace_backlt.emplace_back(3, 3);
}

2.4 insert

在指定位置之前插入数据,list中insert使用的是双向迭代器,不是随机迭代器,那么就不能向以前一样使用 

//不支持这样
lt.insert(it.begin()+3,30);
list<int> lt(5, 1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);lt.insert(lt.begin(), 10);//在首位前插入数据//在第k个位置之前插入数据
auto it = lt.begin();
int k = 3;
while (k--)
{it++;
}
lt.insert(it, 30);//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;
//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;

 


 2.5 erase 

删除指定位置数据

 list<int> lt(5, 1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);int x = 0;cin >> x;auto it = find(lt.begin(), lt.end(), x);//如果find没有找到就会返回第二个参数也就是lt.end()while (it != lt.end()){lt.erase(it);}//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;
//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;

 


 2.6 reverse 

逆置

list<int> lt(5, 1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);lt.reverse();//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;
//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;

 


2.7 sort

因为算法库中的sort函数不支持链表,所以链表自实现了一个sort函数来进行排序,默认是升序  

如果要降序的话可以使用仿函数来进行降序的调整:

1. lt.sort(greater<int>())         2. lt.sort(less<int>())

list<int> lt(5, 1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);lt.sort();//迭代器遍历
list<int>::iterator it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;
//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;


2.8 merge

merge的作用是将两个有序链表进行合并,合并的前提是有序的

合并计算将second链表合并到first链表,那么second链表就会置空,其合并的原理就是取小的尾插到被合并链表

list<int> first;
first.push_back(1);
first.push_back(2);
first.push_back(3);
first.push_back(4);list<int> second;
second.push_back(10);
second.push_back(20);
second.push_back(30);
second.push_back(40);first.merge(second);
//范围for遍历
for (auto e : first)
{cout << e << " ";
}
cout << endl;
//范围for遍历
for (auto e : second)
{cout << e << " ";
}
cout << endl;

 

 


 2.9 unique

有序的数据去掉重复的数据

 

list<int> lt(5, 1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;lt.unique();//范围for遍历
for (auto e : lt)
{cout << e << " ";
}
cout << endl;


 2.10 splice

剪切

将链表指定的数据剪切到被粘贴的链表中去,被剪切链表中被剪切的数据会直接删除,也可以对自身进行操作,即变化自身链表数据的顺序

void test_list6()
{// 一个链表节点转移给另一个链表std::list<int> mylist1, mylist2;std::list<int>::iterator it;// set some initial values:for (int i = 1; i <= 4; ++i)mylist1.push_back(i);      // mylist1: 1 2 3 4for (int i = 1; i <= 3; ++i)mylist2.push_back(i * 10);   // mylist2: 10 20 30it = mylist1.begin();++it;                         // points to 2mylist1.splice(it, mylist2); // mylist1: 1 10 20 30 2 3 4// mylist2 (empty)// "it" still points to 2 (the 5th element// 调整当前链表节点的顺序list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);lt.push_back(6);for (auto e : lt){cout << e << " ";}cout << endl;int x = 0;cin >> x;it = find(lt.begin(), lt.end(), x);if (it != lt.end()){//lt.splice(lt.begin(), lt, it);lt.splice(lt.begin(), lt, it, lt.end());}for (auto e : lt){cout << e << " ";}cout << endl;
}

 


                                                                        感谢观看~                                                                  

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

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

相关文章

公安局软件管理平台建设方案和必要性,论文-———未来之窗行业应用跨平台架构

一、平台方略 由于csdn拦截关键信息&#xff0c;我发发布方案&#xff0c;请留意后面文章

云服务器(华为云)安装java环境。

这篇文章主要是介绍如何搭建华为云服务器中的java环境&#xff0c;也就是jdk的安装。 这里华为云服务器使用的是liunx系统。 uname -a Linux操作系统的版本信息。具体来说&#xff0c;它表明使用的是Ubuntu系统&#xff0c;内核版本是5.15.0&#xff0c;构建于2023年1月20日&a…

16年408-数据结构

第一题&#xff1a; 解析&#xff1a; 经过查表可知&#xff1a;a的链接地址是1010H&#xff0c;而1010H正是表中e所在的位置。 由题可知f存放的位置是1014H&#xff0c; 要将f链接在a和e的中间&#xff0c;则a后面要链接f&#xff0c;f后面要链接e&#xff0c;e的链接地址不变…

【HTTP】请求“报头”,Referer 和 Cookie

Referer 描述了当前这个页面是从哪里来的&#xff08;从哪个页面跳转过来的&#xff09; 浏览器中&#xff0c;直接输入 URL/点击收藏夹打开的网页&#xff0c;此时是没有 referer。当你在 sogou 页面进行搜索时&#xff0c;新进入的网页就会有 referer 有一个非常典型的用…

LeetCode 257. 二叉树的所有路径,dfs

LeetCode 257. 二叉树的所有路径 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 目录 LeetCode 257. 二叉树的所有路径算法选择数据结构解题步骤算法流程算法代码算法分析易错点和注意事项相似题目 算法选择 深度优…

Excel 冻结多行多列

背景 版本&#xff1a;office 2021 专业版 无法像下图内某些版本一样&#xff0c;识别选中框选的多行多列。 如下选中后毫无反应&#xff0c;点击【视图】->【冻结窗口】->【冻结窗格】后自动设置为冻结第一列。 操作 如下&#xff0c;要把前两排冻结起来。 选择 C1&a…

2-102基于matlab的蒙特卡洛仿真

基于matlab的蒙特卡洛仿真&#xff0c;对64QAM和BPSK进行蒙特卡洛仿真&#xff0c;并绘出误码率曲线。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-102基于matlab的蒙特卡洛仿真

详解机器学习经典模型(原理及应用)——支持向量机

一、什么是支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的机器学习算法&#xff0c;可用于解决数据分类&#xff08;二分类&#xff09;和回归问题。在分类问题上&#xff0c;SVM的核心思想是在特征空间中找到一个最优的超平面&#x…

jupyter安装与使用——Ubuntu服务器

jupyter安装与使用——Ubuntu服务器 一、安装miniconda3/anaconda31. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 二、安装jupyter2.1 conda安装2.2 配…

视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?

视频汇聚/视频存储/安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 EasyCVR安防监控视频综合管理平台采用先进的网络传输技术&#xff0…

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统&#xff0c;让生活更精彩&#xff01; &#x1f331;【开篇&#xff1a;走进未来校园&#xff0c;遇见新生态】&#x1f331; 你是否厌倦了传统校园的繁琐与单调&#xff1f;是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; A. 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。…

Windows版本下Redis安装与使用---详解

目录 1、下载Redis压缩包 2、解压到文件夹 3、启动Redis服务 4、打开Redis客户端进行连接 5、使用一些基础操作来测试 6、Redis常用的服务指令 7、C#项目使用redis 8、C#中使用StackExchange.Redis库操作Redis 9、执行 Redis 命令 10、常见报错和相关指令 1、下载Redi…

C语言——文件操作

目录 文件是什么 程序文件 数据文件 二进制文件和文本文件 文件名 文件的作用 文件的打开和关闭 流和标准流 流 标准流 文件指针 文件打开和关闭 打开文件&#xff1a;fopen 关闭文件&#xff1a;fclose 测试代码 文件具体操作 顺序读写 fputc ​编辑 fget…

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术&#xff1a;强化学习中的自我进化之道 在人工智能的快速发展中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;已成为推动智能体自主学习与优化的关键力量。Self-Play技术&#xff0c;作为强化学习领域的一项前沿创新&#xff0c;通过…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

git学习报告

文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令&#xff1a;云端指令 git学习报告 如何配置vscode 安装powershell调教window终端&#xff0c;使其像Linux一样&#xff0c;通过Linux命令…

现代桌面UI框架科普及WPF入门1

现代桌面UI框架科普及WPF入门 文章目录 现代桌面UI框架科普及WPF入门桌面应用程序框架介绍过时的UI框架MFC (Microsoft Foundation Class)缺点 经典的UI框架**WinForms****QT****WPF** 未来的UI框架**MAUI****AvaloniaUI** WPF相对于Winform&#xff0c;QT&#xff0c;MFC的独立…

SysML图例-病毒检测设备

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> SysML图中词汇 SiNW-FET Silicon nanowire field-effect transistors&#xff0c;硅纳米线-场效应晶体管 更多信息可参见&#xff1a; 用于新冠检测的场效应晶体管生物传…

将CSS OKLCH颜色转换为十六进制HEX颜色和十六进制整数格式

我查找了全网都查不到OKLCH&#xff08;&#xff09;方法是颜色转换方法&#xff0c;那今天小编就给大家分享我的方法&#xff0c;可能会有点点误差&#xff0c;但是大体不影响。 程序员必备宝典https://tmxkj.top/#/示例&#xff1a;oklch(0.253267 0.015896 252.418) 得到H…