【C++STL基础入门】list基本使用
文章目录
- 前言
- 一、list简介
- 1.1 list是什么
- 1.2 list的头文件
- 二、list
- 2.1 定义对象
- 2.2 list构造函数
- 2.3 list的属性函数
- 总结
前言
STL(Standard Template Library)是C++标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可以大大简化C++程序的开发过程。其中,list容器是STL提供的一种双向链表实现的数据结构,具有高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。本文将介绍list容器的基本使用方法,包括头文件的引入、定义和构造函数、属性函数以及运算符和算法的示例代码。
一、list简介
1.1 list是什么
STL(标准模板库)的list是C++中的一种数据结构,用于存储和操作链表。链表是一种动态数据结构,与数组不同,链表的元素在内存中不是连续存储的,而是通过指针连接起来。
list可以存储任意类型的数据,并提供了一系列方法来对链表进行操作,如在链表头部或尾部插入/删除元素,以及在任意位置插入/删除元素等。它还支持双向迭代器,可以方便地遍历链表的元素。
使用list的好处是,它在插入和删除元素时效率很高,因为只需要调整指针的指向即可,不需要像数组一样移动其他元素。此外,list的大小可以根据需要自由扩展,并且不会产生内存碎片。
总之,STL的list是一种用于存储和操作链表的数据结构,通过指针将元素连接起来,提供了高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。
1.2 list的头文件
#include <list>

二、list
2.1 定义对象
list<类型> 名称;
2.2 list构造函数
无参构造函数。创建一个空的"list"对象。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList; // 创建一个空的int类型链表return 0;
}
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

- “list(size_type _Count)”: 构造具有指定元素数量的"list"对象。
参数:
- “_Count”: 要创建的链表中元素的数量。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList(5); // 创建一个包含5个默认值为0的int类型元素的链表return 0;
}
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

- “list(size_type _Count, const Type& _Val)”: 构造具有指定元素数量和初始值的"list"对象。
参数:
- “_Count”: 要创建的链表中元素的数量。
- “_Val”: 初始化链表元素的值。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList(3, 10); // 创建一个包含3个值为10的int类型元素的链表return 0;
}
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

- “list(InputIterator _First, InputIterator _Last)”: 构造一个包含给定范围内元素的"list"对象。
参数:
- “_First”: 范围的起始迭代器。
- “_Last”: 范围的结束迭代器。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>
#include <vector>int main() {std::vector<int> myVector = {1, 2, 3, 4, 5};std::list<int> myList(myVector.begin(), myVector.end()); // 使用vector中的元素构造一个新的链表return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
以上示例展示了不同构造函数的使用方法,可以根据实际需求选择适合的构造函数来创建"list"对象。
2.3 list的属性函数
- “size()”: 用于返回"list"中元素的数量。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4, 5};std::cout << "Size of myList: " << myList.size() << std::endl; // 输出链表中元素的数量return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
- “resize()”: 用于改变"list"的大小。
参数:
- “new_size”: 新的大小。
- “value” (可选): 可以指定一个值,用于在扩大大小时在尾部添加的新元素的初始值。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3};myList.resize(5); // 将链表的大小调整为5,默认填充0std::cout << "New size of myList: " << myList.size() << std::endl;myList.resize(8, 10); // 将链表的大小调整为8,并在尾部填充值为10的元素std::cout << "New size of myList: " << myList.size() << std::endl;return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
- “empty()”: 用于检查"list"是否为空,即判断链表中是否没有元素。
示例代码:
﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp
#include <iostream>
#include <list>int main() {std::list<int> myList;if (myList.empty()) {std::cout << "myList is empty." << std::endl;} else {std::cout << "myList is not empty." << std::endl;}return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥
以上示例展示了"size()"、"resize()"和"empty()"函数的使用方法,可以根据需求使用这些函数来获取链表的大小、调整链表的大小以及检查链表是否为空。
总结
本文介绍了C++ STL的list容器的基本使用方法。通过引入头文件、定义和构造函数、属性函数以及运算符和算法的示例代码,我们可以发现list容器的灵活性和高效性,适用于频繁插入和删除元素的场景。使用list容器可以简化C++程序的开发过程,并提高效率。
希望本文能够帮助读者理解list容器的基本使用方法,以及它在实际编程中的作用和优势。如果有任何疑问,请随时提问。
相关文章:
【C++STL基础入门】list基本使用
文章目录 前言一、list简介1.1 list是什么1.2 list的头文件 二、list2.1 定义对象2.2 list构造函数2.3 list的属性函数 总结 前言 STL(Standard Template Library)是C标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可…...
WSL+vscode配置miniob环境
1.配置WSL Windows Subsystem for Linux入门:安装配置图形界面中文环境vscode wu-kan 2.获取源码 找个位置Git Bash然后拉取代码 git clone https://github.com/oceanbase/miniob.git 3.安装相关依赖 https://gitee.com/liangcha-xyy/source/blob/master/how…...
Flutter SliverAppBar 吸顶效果
吸顶是常见的布局,主要使用的是CustomScrollView 和SliverApp组件实现的 页面布局 overrideWidget build(BuildContext context) {return CustomScrollView(controller: controller.scrollController!,physics: const BouncingScrollPhysics(),slivers: [SliverApp…...
Java Spring Boot 自动装配:简化配置和提高开发效率
Spring Boot 自动装配是 Spring Boot 提供的一种特性,它可以根据应用程序的依赖关系和配置信息,自动配置应用程序的各种组件和功能。这样,开发者可以将更多的精力放在业务逻辑的实现上,而不需要手动配置和管理各种组件。 1. 自动…...
对象转换之modelmapper
1. 官网地址:http://modelmapper.org 源码地址:GitHub - modelmapper/modelmapper: Intelligent object mapping 2.实现原理: 主要是基于匹配策略进行属性的转化,目前支持三种策略: 2.1 Standard(默认标准…...
Ant Design+react 路由跳转
今天我们来继续探讨react的路由跳转 首先,创建router文件夹中的index import { lazy } from "react"; import { Outlet,useRoutes } from react-router-dom; //引入页面,引用了路由懒加载 const One lazy(() > import(../pages/one)); c…...
提高爬虫效率的秘诀之一:合理配置库池数量
在提高爬虫效率的过程中,合理配置库池数量是一个重要的秘诀。通过增加或减少库池的数量,可以有效提升爬虫系统的效率和稳定性。本文将介绍如何合理配置库池数量,以及配置不同数量库池的优缺点,帮助您提高爬虫效率,顺利…...
初学者必看,前端 Debugger 调试学习
1.文章简介: 报错和Bug,是贯穿程序员整个编程生涯中,无法回避的问题。而调试,就是帮助程序员定位问题、解决问题的重要手段,因此调试是每个程序员必备技能。 调试本身可分为两个过程: 定位问题 和 解决问题࿰…...
Dubbo—Admin 整体架构与安装步骤
回顾 Dubbo 服务治理体系的总体架构,Admin 是服务治理控制面中的一个核心组件,负责微服务集群的服务治理、可视化展示等。 Admin 部署架构 总体上来说,Admin 部署架构分为以下几个部分: Admin 主进程,包括服务发现…...
C++11打断线程的几种方式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pthread_cancel1.代码演示2.两个重要方法1.pthread_setcancelstate2.pthread_setcanceltype 3.资源回收 二、Boost1.看代码2.资源泄露2.资源回收 总结 前言…...
如何提升网站排名和用户体验:优化网站速度
网站的排名和用户满意度直接受到站点内容的加载速度影响深远。通过精心的网站优化,您不仅可以提高排名,还可以提供更出色的用户体验,尽管用户可能不会察觉到您的网站加载得更快,但这是一个非常有意义的改进。在这篇文章中…...
【Redis】Hash 哈希内部编码方式
Hash 哈希内部编码方式 哈希的内部编码有两种: ziplist(压缩列表):当哈希类型元素个数⼩于hash-max-ziplist-entries配置(默认512个)、同时所有值都⼩于hash-max-ziplist-value配置(默认64字节…...
JUC第二十八讲:JUC工具类: Semaphore详解
JUC工具类: Semaphore详解 本文是JUC第二十八讲,JUC工具类: Semaphore详解。Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证…...
vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景
vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景 目录 vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景一、问题背景二、解决方法三、示例 一、问题背景 代码环境:vue3 ࿰…...
【Qt之QTableWidget和QTreeWidget】树悬停、选择样式及表格表头和首行间隔线
QTableWidget设置表头与首行间隔线 win10 实例化QTableWidget后,表格表头和首行中间无间隔线,以下是通过样式表进行设置: // 设置横向表格头的间隔线,可设置四个方向的间隔线,不需要间隔线的可以设置为0px// border-left:0px sol…...
使用余弦算法计算向量相似性
import pandas as pd import numpy as np import openaifrom openai.embeddings_utils import get_embedding, cosine_similarityopenai.api_key sk-???? embedding_model "text-embedding-ada-002" embedding_encoding "cl100k_base" # this the …...
存档&改造【06】Apex-Fancy-Tree-Select花式树的使用误删页数据还原(根据时间节点导出导入)
之前一直想实现厂区-区域-产线之间的级联选取,于是导入插件Apex-Fancy-Tree-Select花式树 存档&改造【03】Apex-Fancy-Tree-Select花式树的导入-CSDN博客 现在则是在Oracle Apex中的应用 花式书级联列表展示厂区-区域-产线 想要实现的效果 由厂区>…...
OpenCV7-copyTo截取ROI
OpenCV7-copyTo截取ROI copyTo截取感兴趣区域 copyTo截取感兴趣区域 有时候,我们只对一幅图像中的部分区域感兴趣,而原图像又十分大,如果带着非感兴趣区域一次处理,就会对程序的内存造成负担,因此我们希望从原始图像中…...
OpenCV10-图像直方图:直方图绘制、直方图归一化、直方图比较、直方图均衡化、直方图规定化、直方图反射投影
OpenCV10-图像直方图:直方图绘制、直方图归一化、直方图比较、直方图均衡化、直方图规定化、直方图反射投影 1.直方图的绘制2.直方图归一化3.直方图比较4.直方图均衡化5.直方图规定化(直方图匹配)6.直方图反向投影 1.直方图的绘制 图像直方图…...
线性回归模型进行特征重要性分析
目的 线性回归是很常用的模型;在局部可解释性上也经常用到。 数据归一化 归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下,特征归一化可以提高模型的性能,但并不是所有情况下都需要进行归一…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
Ray框架:分布式AI训练与调参实践
Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...
