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

【C++】STL——list的介绍和使用、list增删查改函数的介绍和使用、push_back、pop_back

文章目录

  • 1.list的使用
  • 2.list的增删查改函数
    • (1)push_front 在list首元素前插入值为val的元素
    • (2)pop_front 删除list中第一个元素
    • (3)push_back 在list尾部插入值为val的元素
    • (4)pop_back 删除list中最后一个元素
    • (5)insert 在list position 位置中插入值为val的元素
    • (6)erase 删除list position位置的元素
    • (7)swap 交换两个list中的元素
    • (8)clear 清空list中的有效元素

1.list的使用

list构造函数的介绍和使用

2.list的增删查改函数

在这里插入图片描述

(1)push_front 在list首元素前插入值为val的元素

  push_front()函数用于将一个新的元素插入到链表的开头位置。 通过调用push_front()函数并将待插入的元素作为参数传递给该函数,即可实现在链表开头插入新元素的操作。

  和链表的插入一样,push_front()函数的时间复杂度为O(1),因为在双向链表中插入元素到开头位置的操作只涉及到指针的重新链接,而不需要移动其他元素。

  以下是关于push_front()函数的定义和使用示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {2, 3, 4};// 使用 push_front() 在链表开头插入元素myList.push_front(1);// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//1 2 3 4

(2)pop_front 删除list中第一个元素

  pop_front()函数用于删除链表的第一个元素。

  pop_front()函数的时间复杂度为O(1),因为在双向链表中删除开头元素的操作只涉及到指针的重新链接,而不需要移动其他元素。

  以下是关于pop_front()函数的定义和使用示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4};// 使用 pop_front() 删除链表的第一个元素myList.pop_front();// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//2 3 4

(3)push_back 在list尾部插入值为val的元素

  push_back()函数用于将一个元素插入到链表的末尾位置。 通过调用push_back()函数并将待插入的元素作为参数传递给该函数,即可实现在链表末尾插入新元素的操作。

  以下是关于push_back()函数的定义和使用示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3};// 使用 push_back() 在链表末尾插入元素myList.push_back(4);// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//1 2 3 4

(4)pop_back 删除list中最后一个元素

  pop_back()函数用于删除std::list容器中的最后一个元素。

  以下是关于pop_back()函数的使用和定义示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4};// 使用pop_back()删除链表的最后一个元素myList.pop_back();// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//1 2 3

(5)insert 在list position 位置中插入值为val的元素

  insert()函数用于在指定位置插入一个或多个元素。 通过提供插入位置的迭代器,并使用单个元素或迭代器范围作为参数,即可实现在指定位置插入新元素的操作。

  insert()函数的时间复杂度取决于插入的元素个数,如果只插入一个元素,则时间复杂度为O(1),如果插入多个元素,则时间复杂度为插入位置后元素个数的线性复杂度。

  以下是关于insert()函数的定义和使用示例:

  我们使用范围for循环遍历链表中的元素,并将它们输出。在循环体内,通过element变量获取当前元素的值,并将其输出。

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4};// 在第二个位置插入元素auto it = std::next(myList.begin()); // 获取迭代器指向第二个位置myList.insert(it, 5);// 在第三个位置插入多个元素std::list<int> newElements = {6, 7};it = std::next(myList.begin(), 2); // 获取迭代器指向第三个位置myList.insert(it, newElements.begin(), newElements.end());// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//1 5 6 7 2 3 4

(6)erase 删除list position位置的元素

  erase()函数用于从链表中删除一个或多个元素。

  以下是关于erase()函数的定义和使用示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4};// 删除第三个位置上的元素auto it = std::next(myList.begin(), 2); // 获取迭代器指向第三个位置myList.erase(it);// 删除第二到第四个位置上的元素auto first = std::next(myList.begin(), 1); // 获取迭代器指向第二个位置auto last = std::next(myList.begin(), 4); // 获取迭代器指向第五个位置myList.erase(first, last);// 输出链表中的元素for (const auto& element : myList) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//1 4

(7)swap 交换两个list中的元素

  swap()函数用于交换两个对象的值。

  以下是关于swap()函数的定义和使用示例:

#include <iostream>
#include <vector>int main() {int a = 5;int b = 10;// 使用 swap() 函数交换两个整数值std::swap(a, b);std::cout << "a: " << a << std::endl;std::cout << "b: " << b << std::endl;std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = {4, 5, 6};// 使用 swap() 函数交换两个向量的值std::swap(vec1, vec2);std::cout << "vec1: ";for (const auto& element : vec1) {std::cout << element << " ";}std::cout << std::endl;std::cout << "vec2: ";for (const auto& element : vec2) {std::cout << element << " ";}std::cout << std::endl;return 0;
}//a: 10
//b: 5
//vec1: 4 5 6
//vec2: 1 2 3

(8)clear 清空list中的有效元素

  clear()函数用于清空链表,即删除链表中的所有元素。

  clear()函数的时间复杂度为O(N),其中N是链表中的元素个数。在清空链表时,clear()函数会对每个元素调用析构函数来释放内存。

  以下是关于clear()函数的定义和使用示例:

#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4};// 使用 clear() 函数清空链表myList.clear();// 输出链表中的元素个数std::cout << "Size of myList after clear: " << myList.size() << std::endl;return 0;
}//Size of myList after clear: 0

相关文章:

【C++】STL——list的介绍和使用、list增删查改函数的介绍和使用、push_back、pop_back

文章目录 1.list的使用2.list的增删查改函数&#xff08;1&#xff09;push_front 在list首元素前插入值为val的元素&#xff08;2&#xff09;pop_front 删除list中第一个元素&#xff08;3&#xff09;push_back 在list尾部插入值为val的元素&#xff08;4&#xff09;pop_ba…...

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…...

ChatGPT在智能推送和个性化广告中的应用如何?

ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣&#xff0c;精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型&#xff0c;具有强大的语言理解和生成能力&#xff0c;可以在智能推送和…...

科技的成就(四十八)

373、新的编程语言 Swift 2014 年 6 月 2 日&#xff0c;苹果在 WWDC 上发布了新的编程语言 Swift。Swift 由克里斯拉特纳在苹果内部主持开发&#xff0c;历时 4 年。它是一种支持多编程范式的可编译语言&#xff0c;其设计简单、高效、安全&#xff0c;用来开发 macOS/OS X、i…...

spring5高级49讲

文章目录 1、BeanFactory与ApplicationContext2、BeanFactory与ApplicationContext的容器实现BeanFactory的容器实现后处理器排序 ApplicationContext的容器实现 3、Bean的生命周期Bean后处理器 4、常见的Bean后处理器5、常见BeanFactory后处理器6、Aware和InitializingBean接口…...

MacOS本地安装Hadoop3

金翅大鹏盖世英&#xff0c;展翅金鹏盖世雄。 穿云燕子锡今鸽&#xff0c;踏雪无痕花云平。 ---------------- 本文密钥&#xff1a;338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程&#xff0c;也可以作为在任何类linux平台上安装hadoop3借鉴。 …...

十五章:使用类别峰值响应的弱监督实例分割

0.摘要 目前&#xff0c;使用图像级别标签而不是昂贵的像素级掩码进行弱监督实例分割的研究还未得到充分探索。本文通过利用类别峰值响应来实现一个分类网络&#xff0c;用于提取实例掩码&#xff0c;来解决这个具有挑战性的问题。只通过图像标签的监督下&#xff0c;完全卷积的…...

自然语言处理从入门到应用——LangChain:模型(Models)-[聊天模型(Chat Models):基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 聊天模型是语言模型的一种变体。虽然聊天模型在内部使用语言模型&#xff0c;但它们公开的接口略有不同。它们不是提供一个“输入文本&#xff0c;输出文本”的API&#xff0c;而是提供一个以“聊天消息”作为输入和输…...

Asp.Net 使用Log4Net (SQL Server)

Asp.Net 使用Log4Net (SQL Server) 1. 创建数据库表 首先&#xff0c;在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例&#xff1a; CREATE TABLE [dbo].[Logs]([Id] [INT] IDENTITY(1,1) PRIMARY KEY,[Date] [DATETIME] NOT NULL,[Thread] …...

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 &#xff08;1&#xff09;开发 Vue 的两种方式 核心包传统开发模式&#xff1a;基于 html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xf…...

发现 ModStartCMS:构建梦想网站的全新选择

亲爱的网站开发者和内容创作者们&#xff0c; 在当今数字化的时代&#xff0c;网站已经成为展示品牌、传递信息和吸引目标受众的关键渠道。为了帮助您更高效地打造梦想中的网站&#xff0c;我们荣幸地向您介绍 ModStartCMS&#xff0c;这是一款基于 Laravel 的全新模块化内容管…...

大数据Flink(五十二):Flink中的批和流以及性能比较

文章目录 Flink中的批和流以及性能比较 ​​​​​​​​​​​​​​一、Flink中的批和流...

【MySQL】MySQL索引、事务、用户管理

20岁的男生穷困潦倒&#xff0c;20岁的女生风华正茂&#xff0c;没有人会一直风华正茂&#xff0c;也没有人会一直穷困潦倒… 文章目录 一、MySQL索引特性&#xff08;重点&#xff09;1.磁盘、OS、MySQL&#xff0c;在进行数据IO时三者的关系2.索引的理解3.聚簇索引&#xff0…...

函数重载与引用

文章目录 一、函数重载1. 重载规则2.重载列子3.函数名修饰规则 二、引用1.本质2.特性1. 引用必须在定义时初始化2 . 一个变量可以有多个引用3 . 引用一旦引用一个实体&#xff0c;就不能引用其他实体 3.引用例子4.引用的权限5.效率比较6.指针跟引用的区别 一、函数重载 函数重…...

如何快速模拟一个后端 API

第一步&#xff1a;创建一个文件夹&#xff0c;用来存储你的数据 数据&#xff1a; {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…...

DLA :pytorch添加算子

pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子&#xff0c;需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据&#xff0c;反向传播需要输入数据和上一层的梯度&#xff0c;然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。 a…...

Java特殊时间格式转化

平常开发过程当中&#xff0c;我们可能会见到有的日期格式是这样的。 1、2022-12-21T12:20:1608:00 2、2022-12-21T12:20:16.0000800 3、2022-12-21T12:20:16.00008:00下面来说一下这种时间格式怎么转换 第一种&#xff1a;2022-12-21T12:20:1608:00 代码如下&#xff1a; p…...

在CSDN学Golang云原生(Kubernetes声明式资源管理Kustomize)

一&#xff0c;生成资源 在 Kubernetes 中&#xff0c;我们可以通过 YAML 或 JSON 文件来定义和创建各种资源对象&#xff0c;例如 Pod、Service、Deployment 等。下面是一个简单的 YAML 文件示例&#xff0c;用于创建一个 Nginx Pod&#xff1a; apiVersion: v1 kind: Pod m…...

后台管理系统中常见的三栏布局总结:使用element ui构建

vue2 使用 el-menu构建的列表布局&#xff1a; 列表可以折叠展开 <template><div class"home"><header><el-button type"primary" click"handleClick">切换</el-button></header><div class"conte…...

SpringCloud学习路线(10)——分布式搜索ElasticSeach基础

一、初识ES &#xff08;一&#xff09;概念&#xff1a; ES是一款开源搜索引擎&#xff0c;结合数据可视化【Kibana】、数据抓取【Logstash、Beats】共同集成为ELK&#xff08;Elastic Stack&#xff09;&#xff0c;ELK被广泛应用于日志数据分析和实时监控等领域&#xff0…...

深入解析RS485接口:从硬件设计到工业应用

1. RS485接口基础解析 第一次接触RS485时&#xff0c;我也被它复杂的电气特性搞得一头雾水。直到在工厂里亲眼看到它如何稳定地穿过嘈杂的电机区域传输数据&#xff0c;才真正理解这个老牌工业接口的魅力。RS485本质上是一种差分信号传输标准&#xff0c;采用双绞线进行平衡传…...

NXP S32K3开发日记:PIT0的RTI唤醒功能调试全记录(含时钟源配置误区)

NXP S32K3开发实战&#xff1a;PIT0 RTI唤醒功能深度解析与排错指南 作为一名长期深耕汽车电子领域的嵌入式工程师&#xff0c;最近在基于NXP S32K3系列MCU开发低功耗应用时&#xff0c;遇到了一个颇具挑战性的问题——如何可靠地使用PIT0的RTI&#xff08;Real Time Interrupt…...

数学动画音频同步:让几何图形随音乐起舞的技术实现

数学动画音频同步&#xff1a;让几何图形随音乐起舞的技术实现 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 在数学可视化领域&#xff0c;Manim…...

突破内容采集瓶颈:XHS-Downloader的5大行业解决方案与效率提升指南

突破内容采集瓶颈&#xff1a;XHS-Downloader的5大行业解决方案与效率提升指南 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、…...

Android TTS开发避坑指南:为什么你的Google语音引擎播不出中文?从初始化到语音包管理的完整解决方案

Android TTS开发实战&#xff1a;解决Google语音引擎中文播报的7个关键问题 在移动应用开发中&#xff0c;文字转语音(TTS)功能正变得越来越重要。从无障碍辅助功能到语音导航、有声阅读&#xff0c;TTS技术为应用增添了更丰富的交互维度。然而&#xff0c;许多Android开发者在…...

Qwen-Ranker Pro快速部署:Windows WSL2环境下Streamlit兼容性方案

Qwen-Ranker Pro快速部署&#xff1a;Windows WSL2环境下Streamlit兼容性方案 1. 环境准备与系统要求 在Windows WSL2环境中部署Qwen-Ranker Pro需要确保系统满足以下基本要求&#xff1a; 硬件要求&#xff1a; 内存&#xff1a;至少8GB RAM&#xff08;推荐16GB以上&…...

突破试用限制:开源脚本实现IDM无限使用的完整解决方案

突破试用限制&#xff1a;开源脚本实现IDM无限使用的完整解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 一、问题引入&#xff1a;IDM用户的痛点与解决…...

XTDrone仿真环境配置踩坑实录:我是如何解决Gazebo插件冲突和MAVROS地理库安装失败的

XTDrone仿真环境配置踩坑实录&#xff1a;Gazebo插件冲突与MAVROS地理库安装的终极解决方案 从崩溃到重生的仿真环境搭建之旅 上周三凌晨3点&#xff0c;我的终端窗口里又一次弹出那个熟悉的红色错误提示——"Gazebo plugin not found"。这已经是连续第三个通宵和X…...

5分钟快速上手:UNTRUNC视频修复工具终极指南

5分钟快速上手&#xff1a;UNTRUNC视频修复工具终极指南 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你是否曾经因为相机…...

深入解析Python中ort.InferenceSession的底层实现与性能优化

1. 揭开ort.InferenceSession的神秘面纱 第一次接触ort.InferenceSession时&#xff0c;我完全被它的性能震惊了。作为一个用Python加载ONNX模型的标准入口&#xff0c;它看起来就是个普通的类实例化操作&#xff0c;但背后却隐藏着C和Python的完美协作。这种设计让开发者既能享…...