【C++STL基础入门】list交换、翻转,排序、合并和拼接操作

文章目录

  • 前言
  • 一、交换list
  • 二、翻转list
  • 三、排序list
  • 四、合并list
  • 五、拼接list
  • 总结


前言

在C++的标准模板库(STL)中,list是一个双向链表容器,提供了丰富的功能和操作。本文将介绍list容器在交换、翻转、排序、合并和拼接等方面的基础操作和用法。


一、交换list

1、void swap(list& from)

函数原型:void swap(list& from)

功能:将当前list与另一个list进行交换,两个list的内容互换。
参数:要交换的list

示例代码:

#include <iostream>
#include <list>int main() {std::list<int> list1 = {1, 2, 3};std::list<int> list2 = {4, 5, 6};std::cout << "Before swapping:\n";for (const auto& num : list1) {std::cout << num << ' ';}std::cout << '\n';for (const auto& num : list2) {std::cout << num << ' ';}std::cout << '\n';list1.swap(list2);std::cout << "After swapping:\n";for (const auto& num : list1) {std::cout << num << ' ';}std::cout << '\n';for (const auto& num : list2) {std::cout << num << ' ';}std::cout << '\n';return 0;
}

在这里插入图片描述

输出结果:

Before swapping:
1 2 3
4 5 6
After swapping:
4 5 6
1 2 3

二、翻转list

1、reserve
函数原型:void reverse()

功能:将list中的元素进行翻转,即按逆序重新排列。

示例代码:

#include <iostream>
#include <list>int main() {std::list<int> mylist = {1, 2, 3, 4, 5};std::cout << "Before reversing:\n";for (const auto& num : mylist) {std::cout << num << ' ';}std::cout << '\n';mylist.reverse();std::cout << "After reversing:\n";for (const auto& num : mylist) {std::cout << num << ' ';}std::cout << '\n';return 0;
}

在这里插入图片描述

输出结果:

Before reversing:
1 2 3 4 5
After reversing:
5 4 3 2 1

三、排序list

1、sort()
函数原型:void sort()

功能:按升序对list中的元素进行排序。

示例代码:

#include <iostream>
#include <list>int main() {std::list<int> mylist = {5, 2, 1, 4, 3};std::cout << "Before sorting:\n";for (const auto& num : mylist) {std::cout << num << ' ';}std::cout << '\n';mylist.sort();std::cout << "After sorting:\n";for (const auto& num : mylist) {std::cout << num << ' ';}std::cout << '\n';return 0;
}

在这里插入图片描述

输出结果:

Before sorting:
5 2 1 4 3
After sorting:
1 2 3 4 5

四、合并list

1、void merge( list &lst );
函数原型:void merge(list& lst)

功能:将另一个list lst 合并到当前list中,合并后list中的元素仍然保持有序。

示例代码:

#include <iostream>
#include <list>int main() {std::list<int> list1 = {1, 3, 5};std::list<int> list2 = {2, 4, 6};std::cout << "List1:\n";for (const auto& num : list1) {std::cout << num << ' ';}std::cout << '\n';std::cout << "List2:\n";for (const auto& num : list2) {std::cout << num << ' ';}std::cout << '\n';list1.merge(list2);std::cout << "Merged List:\n";for (const auto& num : list1) {std::cout << num << ' ';}std::cout << '\n';return 0;
}

在这里插入图片描述

输出结果:

List1:
1 3 5
List2:
2 4 6
Merged List:
1 2 3 4 5 6

五、拼接list

1、void splice( iterator pos, list &lst );
void splice(iterator pos, list& lst):

函数功能:将列表 lst 中的所有元素插入到目标列表 list 的 pos 位置之前, lst 中的元素会从 lst 中移除。
参数:
pos:目标列表中的插入位置的迭代器。
lst:要插入到目标列表中的源列表。
示例代码:

std::list<int> destList = {1, 2, 3};
std::list<int> srcList = {4, 5, 6};destList.splice(destList.begin(), srcList);// 输出目标列表
for (const auto& element : destList) {std::cout << element << " ";  // 输出:4 5 6 1 2 3
}// 输出源列表
for (const auto& element : srcList) {std::cout << element << " ";  // 输出:(空)
}

在这里插入图片描述

2、void splice( iterator pos, list &lst, iterator del );
函数功能:将 lst 中的元素 del 插入到目标列表 list 的 pos 位置之前, del 本身会从 lst 中移除。
参数:
pos:目标列表中的插入位置的迭代器。
lst:要插入到目标列表中的源列表。
del:lst 中要移除并插入到目标列表的元素的迭代器。
示例代码:

std::list<int> destList = {1, 2, 3};
std::list<int> srcList = {4, 5, 6};auto srcIter = std::find(srcList.begin(), srcList.end(), 5);
destList.splice(destList.begin(), srcList, srcIter);// 输出目标列表
for (const auto& element : destList) {std::cout << element << " ";  // 输出:5 1 2 3
}// 输出源列表
for (const auto& element : srcList) {std::cout << element << " ";  // 输出:4 6
}

在这里插入图片描述

3、void splice( iterator pos, list &lst, iterator start, iterator end );
函数功能:将源列表 lst 中从 start 到 end(不包括 end)之间的元素插入到目标列表 list 的 pos 位置之前,这些元素会从 lst 中移除。
参数:
pos:目标列表中的插入位置的迭代器。
lst:要插入到目标列表中的源列表。
start:源列表中要移除并插入到目标列表的起始位置的迭代器。
end:源列表中要移除但不插入到目标列表的结束位置的迭代器。
示例代码:

std::list<int> destList = {1, 2, 3};
std::list<int> srcList = {4, 5, 6};auto srcStart = std::find(srcList.begin(), srcList.end(), 4);
auto srcEnd = std::find(srcList.begin(), srcList.end(), 6);
destList.splice(destList.begin(), srcList, srcStart, srcEnd);// 输出目标列表
for (const auto& element : destList) {std::cout << element << " ";  // 输出:4 5 1 2 3
}// 输出源列表
for (const auto& element : srcList) {std::cout << element << " ";  // 输出:6
}

在这里插入图片描述


总结

通过本文的介绍,我们了解了list容器在交换、翻转、排序、合并和拼接方面的基础操作。这些功能使得list容器成为一个强大而灵活的工具,为我们的编程提供了便利。在实际应用中,我们可以根据具体需求,灵活运用这些操作,以满足不同的场景需求。希望本文对你对C++STL中list容器的基础入门有所帮助!

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

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

相关文章

消息中间件

rabbitmq如何保证消息不丢失&#xff1f; 先要看生产者发送消息再哪个环节会丢失&#xff1f; 1 生产者发送消息到交换机失败&#xff08;生产者服务宕机&#xff09; 2 交换机到队列失败 3队列中消息丢失 消息失败后怎么处理呢&#xff1f; 可以设置回调方法重发 记录日…

【JVM】运行时数据区之方法区——自问自答

开局从康师傅那里借图几张 线程共享与私有 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分&#xff0c;但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。” 但对于HotSpotJVM而言&#xff0c;方法区还有一个别名叫做Non-Heap(非堆)&#…

Vue之ElementUI之动态树+数据表格+分页(项目功能)

目录 前言 一、实现动态树形菜单 1. 配置相应路径 2. 创建组件 3. 配置组件与路由的关系 index.js 4. 编写动态树形菜单 5. 页面效果演示 二、实现数据表格绑定及分页功能 1. 配置相应路径 2. 编写数据表格显示及分页功能代码 BookList.vue 3. 演示效果 总结 前言…

vue 普通组件的 局部注册

vue 普通组件的 注册 11 Vue2_3入门到实战-配套资料\01-随堂代码素材\day03\素材\00-准备代码\小兔鲜首页静态页\src

蓝桥杯每日一题20223.9.26

4407. 扫雷 - AcWing题库 题目描述 分析 此题目使用map等都会超时&#xff0c;所以我们可以巧妙的使用哈希模拟散列表&#xff0c;哈希表初始化为-1首先将地雷读入哈希表&#xff0c;找到地雷的坐标在哈希表中对应的下标&#xff0c;如果没有则此地雷的位置第一次出现&#…

MySQL基础篇-约束

目录 1.约束概述 2.分类 3.测试user表的约束情况 主键约束 非空约束及唯一约束 检查约束 默认约束 4.外键约束 外键约束的语法 外键约束的删除/更新行为 小结 1.约束概述 MySQL约束&#xff08;Constraints&#xff09;是用于确保表中数据完整性和一致性的规则。它们定…

vue3 + mark.js | 实现文字标注功能

页面效果 具体实现 新增 1、监听鼠标抬起事件&#xff0c;通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位置。2、通过 选中的文字长度是否大于0或window.getSelection().isCollapsed (返回一个布尔值用于描述选区的起始点和终止点是否位于一个位置&…

2.(vue3.x+vite)组件注册并调用

前端技术社区总目录(订阅之前请先查看该博客) 关联博客 1.(vue3.x+vite)封装组件 一:umd调用方式 1:引入umd.js <script src="./public/myvue5.umd.js"></script>2:编写代码调用 (1)umd方式,根据“5

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 &#xff08;Multiprocessing&#xff09;2、多线程&#xff08;Multithreading&#xff09;3、协程&#xff08;Coroutine&#xff09; 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …

Vue+ElementUI实现动态树和表格数据的分页模糊查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…

Denoising diffusion implicit models 阅读笔记

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本&#xff0c;需要迭代多次&#xff0c;速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程&#xff0c;减少迭代的次数&#xff0c;并且要求DDIM可以复用DDPM训练的网…

lv5 嵌入式开发-7 有名管道和无名管道

目录 1 进程间通信介绍 2 无名管道 2.1 无名管道特点 ​编辑 2.2 读无名管道 2.3 写无名管道 3 有名管道 3.1 有名管道特点 3.2 写有名管道 3.3 读有名管道 掌握&#xff1a;进程间通信方式介绍、无名管道特点、无名管道创建、无名管道读写特性&#xff1b;有名管道…

深入浅出DAX:SELECTEDVALUE()

深入浅出DAX&#xff1a;SELECTEDVALUE() SELECTEDVALUE()&#xff0c;如果筛选 columnName 的上下文后仅剩下一个非重复值&#xff0c;则返回该值。否则返回alternateResult&#xff0c;语法如下&#xff1a; SELECTEDVALUE(<columnName>[, <alternateResult>] …

Rabbit消息的可靠性

生产者重连 消费者重试 Confirm模式简介 消息的confirm确认机制&#xff0c;是指生产者投递消息后&#xff0c;到达了消息服务器Broker里面的exchange交换机&#xff0c;则会给生产者一个应答&#xff0c;生产者接收到应答&#xff0c;用来确定这条消息是否正常的发送到Broker…

【大数据】Doris 构建实时数仓落地方案详解(三):Doris 实时数仓设计

本系列包含&#xff1a; Doris 构建实时数仓落地方案详解&#xff08;一&#xff09;&#xff1a;实时数据仓库概述Doris 构建实时数仓落地方案详解&#xff08;二&#xff09;&#xff1a;Doris 核心功能解读Doris 构建实时数仓落地方案详解&#xff08;三&#xff09;&#…

数据库存储引擎和数据类型详细介绍

目录 一、数据库存储引擎&#xff08;了解&#xff09;1.了解MySQL体系结构2.存储引擎&#xff08;了解&#xff09;2.1.存储引擎的介绍2.2.存储引擎分类2.3.如何选择引擎&#xff1f; 3.事务控制语言(TCL)事务的四个特性(ACID) 二、数据类型&#xff08;了解&#xff09;1.整型…

Servlet操作与用法(保姆式教学)

Servlet介绍 什么是servlet Servlet&#xff08;Servlet Applet的缩写&#xff0c;全称 Java Servlet&#xff09;&#xff1a;适用于Java编写的服务器程序&#xff0c;其主要功能是在于交互式的浏览和修改数据&#xff0c;生成动态Web内容。狭义的Servlet是指Java语言实现的…

Xmake v2.8.3 发布,改进 Wasm 并支持 Xmake 源码调试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

ARM day1

1.复习今日内容 2.搭建汇编环境 下发资料-》工具软件 -》汇编环境搭建 3.安装Ubuntu下的交叉编译工具链 思维导图&#xff1a;

latexocr安装过程中遇到的问题解决办法

环境要求&#xff1a;需要Python版本3.7&#xff0c;并安装相应依赖文件 具体的详细安装步骤可见我上次写的博文&#xff1a;Mathpix替代者|科研人必备公式识别插件|latexocr安装教程 ‘latexocr‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的相关解决办…