# C++之STL整理(9)之list用法(创建、赋值、增删查改)详解

C++之STL整理(9)之list用法(创建、赋值、增删查改)详解

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的list用法整理

  • C++之STL整理(9)之list用法(创建、赋值、增删查改)详解
  • 一、 list 对象的创建
    • list 构造函数
      • 1.1 默认构造函数
      • 1.2 区间构造函数
      • 1.3 拷贝指定元素次数的构造函数
      • 1.4 拷贝构造函数
  • 二、list 数据元素的增删查改
    • 2.1 尾部插入元素
    • 2.2 删尾部元素
    • 2.3 开头插入元素
    • 2.4 删开头元素
    • 2.5 在指定位置插入元素
    • 2.6 在指定位置插入多个元素
    • 2.7 在指定位置插入区间元素
    • 2.8 清空所有元素
    • 2.9 删指定区间元素
    • 2.10 删指定位置元素
    • 2.11 删所有匹配元素
  • 三、 list 大小操作
    • 3.1 返回容器中元素的个数
    • 3.2 判断容器是否为空
    • 3.3 重新指定容器的长度为指定值(默认填充)
    • 3.4 重新指定容器的长度为指定值并指定填充值
  • 四、 list 赋值操作
    • 4.1 将区间中的数据拷贝赋值给本身
    • 4.2 将指定个数的元素拷贝赋值给本身
    • 4.3 重载等号操作符进行赋值
    • 4.4 交换两个 list 的元素
  • 五、 list 数据的存取
    • 5.1 返回第一个元素
    • 5.2 返回最后一个元素
  • 六、list 反转与排序
    • 6.1 反转链表
    • 6.2 对链表进行排序
  • 总结


提示:本文为 C++ 中 list构造、赋值、接口 的写法和举例


一、 list 对象的创建

  STL 中的std::list 是 C++ 标准模板库(STL)中的一种双向链表数据结构,可以任意位置高效插与删。它提供了许多操作来管理链表中的元素,如插、删、遍历等。以下是对 std::list 及其相关函数的详细解释,并给出每个函数的简单使用例子:

list 构造函数

1.1 默认构造函数

std::list<int> lst; // 创建一个空的 int 类型 list

1.2 区间构造函数

int arr[] = {1, 2, 3, 4, 5};  
std::list<int> lst(arr, arr + 5); // 创建一个包含数组元素的 list

1.3 拷贝指定元素次数的构造函数

std::list<int> lst(10, 5); // 创建一个包含 10 个 5 的 list

1.4 拷贝构造函数

std::list<int> lst1(10, 5);  
std::list<int> lst2(lst1); // 创建一个 lst1 的副本 lst2

二、list 数据元素的增删查改

2.1 尾部插入元素

std::list<int> lst;  
lst.push_back(1); // 在 lst 尾部插入元素 1

2.2 删尾部元素

lst.push_back(2); // lst 现在为 {1, 2}  
lst.pop_back(); // 删 lst 的最后一个元素,lst 现在为 {1}

2.3 开头插入元素

lst.push_front(0); // 在 lst 开头插入元素 0,lst 现在为 {0, 1}

2.4 删开头元素

lst.pop_front(); // 删 lst 的第一个元素,lst 现在为 {1}

2.5 在指定位置插入元素

std::list<int>::iterator it = lst.begin();  
lst.insert(it, 2); // 在 lst 的开头插入元素 2,lst 现在为 {2, 1}

2.6 在指定位置插入多个元素

lst.insert(lst.end(), 3, 3); // 在 lst 尾部插入 3 个元素 3,lst 现在为 {2, 1, 3, 3, 3}

2.7 在指定位置插入区间元素

std::list<int> lst2 = {4, 5, 6};  
lst.insert(lst.begin(), lst2.begin(), lst2.end()); // 在 lst 开头插入 lst2 的元素,lst 现在为 {4, 5, 6, 2, 1, 3, 3, 3}

2.8 清空所有元素

lst.clear(); // lst 现在是空的

2.9 删指定区间元素

lst.push_back(4); lst.push_back(5); lst.push_back(6); // lst 现在是 {4, 5, 6}  
lst.erase(lst.begin(), std::next(lst.begin(), 2)); // 删从开头到第二个元素之后的位置,lst 现在为 {6}

2.10 删指定位置元素

lst.push_back(7); // lst 现在是 {6, 7}  
lst.erase(std::prev(lst.end())); // 删最后一个元素之前的元素,lst 现在为 {7}

2.11 删所有匹配元素

lst.push_back(7); lst.push_back(7); // lst 现在是 {7, 7}  
lst.remove(7); // 删所有值为 7 的元素,lst 现在是空的

std::list 提供了丰富的操作来管理链表中的元素,这些操作都是高效的,因为 std::list 的节点存储了指向前后节点的指针,使得插入和删操作可以在常数时间内完成。在需要频繁进行插入和删操作的场景下,std::list 通常是一个很好的选择。

三、 list 大小操作

3.1 返回容器中元素的个数

std::list<int> lst = {1, 2, 3, 4, 5};  
std::size_t size = lst.size(); // size 为 5

3.2 判断容器是否为空

std::list<int> empty_lst;  
if (empty_lst.empty()) {  // 此代码块会被执行,因为 empty_lst 是空的  
}

3.3 重新指定容器的长度为指定值(默认填充)

std::list<int> lst = {1, 2, 3};  
lst.resize(5); // lst 现在为 {1, 2, 3, 默认值, 默认值}

3.4 重新指定容器的长度为指定值并指定填充值

std::list<int> lst = {1, 2, 3};  
lst.resize(5, 0); // lst 现在为 {1, 2, 3, 0, 0}

四、 list 赋值操作

4.1 将区间中的数据拷贝赋值给本身

std::list<int> lst1 = {1, 2, 3};  
std::list<int> lst2;  
lst2.assign(lst1.begin(), lst1.end()); // lst2 现在为 {1, 2, 3}

4.2 将指定个数的元素拷贝赋值给本身

std::list<int> lst;  
lst.assign(3, 4); // lst 现在为 {4, 4, 4}

4.3 重载等号操作符进行赋值

std::list<int> lst1 = {1, 2, 3};  
std::list<int> lst2;  
lst2 = lst1; // lst2 现在为 {1, 2, 3}

4.4 交换两个 list 的元素

std::list<int> lst1 = {1, 2, 3};  
std::list<int> lst2 = {4, 5, 6};  
lst1.swap(lst2); // lst1 现在为 {4, 5, 6},lst2 现在为 {1, 2, 3}

五、 list 数据的存取

5.1 返回第一个元素

std::list<int> lst = {1, 2, 3};  
int first_elem = lst.front(); // first_elem 为 1

5.2 返回最后一个元素

int last_elem = lst.back(); // last_elem 为 3

六、list 反转与排序

6.1 反转链表

std::list<int> lst = {1, 2, 3, 4, 5};  
lst.reverse(); // lst 现在为 {5, 4, 3, 2, 1}

6.2 对链表进行排序

std::list<int> lst = {5, 3, 1, 4, 2};  
lst.sort(); // lst 现在为 {1, 2, 3, 4, 5}

需要注意的是,std::list 的 sort 方法只适用于包含可比较元素的列表。对于自定义类型的元素,你需要提供比较函数或重载比较操作符,以便 sort 方法能够正确地对元素进行排序。

总结

std::list 的这些操作提供了灵活且高效的方式来管理链表结构的数据,使得在需要频繁进行插入和删除操作的场景中,std::list 成为一个非常合适的选择。

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

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

相关文章

win 安装comfigUI 和一些问题

安装内容&#xff0c;参考&#xff08;1&#xff09;有很详细安装方式 windows压缩包安装ComfyUI 在发布页面上&#xff0c;有一个适用于 Windows 的便携式单机版&#xff0c;可以在 Nvidia GPU 上运行&#xff0c;也可以只在 CPU 上运行。 官网下载地址&#xff1a; https:/…

Electron+Vue3整合 - 开发时状态整合

说明 本文介绍一下 Electron Vue3 的整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b;步骤一&#xff1a;创建vue3项目 常规操作&#xff0c;不再赘…

(C语言)fscanf与fprintf函数详解

目录 1 fprintf详解 1.1 向文件流中输入数据 1.2 向标准输入流写数据 2. fscanf函数详解 2.1 从文件中读取格式化数据 2.2 从标准输入流中读取格式化数据 1 fprintf详解 头文件&#xff1a;stdio.h 该函数和printf的参数特别像&#xff0c;只是多了一个参数stream&#…

scss 和css 的区别 scss变量和css变量的区别

scss 和 css 的区别 语法差异&#xff1a; CSS 使用大括号 {} 和分号 ; 来定义样式规则和属性。SCSS 使用了 Sass 的语法&#xff0c;它允许使用类似编程语言的结构&#xff0c;如变量、嵌套规则、混合&#xff08;mixins&#xff09;和继承等。 嵌套规则&#xff1a; 在 SCSS …

删除word中下划线的内容

当试卷的题目直接含答案&#xff0c;不利用我们刷题。这时如果能够把下划线的内容删掉&#xff0c;那么将有利于我们复习。 删除下划线内容的具体做法&#xff1a; ①按ctrl H ②点格式下面的字体 ③选择下划线线型中的_____ ④勾选使用通配符并在查找内容中输入"?&qu…

增强现实(AR)开发框架

增强现实&#xff08;AR&#xff09;开发框架为开发者提供了构建AR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统和网络功能。以下是一些流行的AR开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

【C语言】贪吃蛇项目(2)- 实现代码详解

文章目录 前言一、游戏开始界面设计首先 - 打印环境界面其次 - 游戏地图、蛇身及食物的设计1、地图2、蛇身设置及打印3、食物 二、游戏运行环节蛇的上下左右移动等功能蛇的移动 三、结束游戏代码 前言 在笔者的前一篇博客中详细记载了贪吃蛇项目所需的一些必备知识以及我们进行…

MySQL面试题 3

问题1&#xff1a;char、varchar的区别是什么&#xff1f; varchar是变长而char的长度是固定的。如果你的内容是固定大小的&#xff0c;你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么&#xff1f; DELETE命令从一个表中删除某一行&#xff0c;或多行&#xff0…

上位机图像处理和嵌入式模块部署(树莓派4b实现动态插件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和上位机一样&#xff0c;我们的智能硬件如果想应用到更多的场景&#xff0c;那么势必需要实现更多的算法。这些算法和算法之间最好是松散耦合的插…

存储过程的使用(二)

目录 带 OUT 参数的存储过程 输入一个编号&#xff0c;查询数据表 emp中是否有这个编号&#xff0c;如果有返回对应员工姓名&#xff0c;如果没有&#xff0c;则提示没有对应员工 使用 EXEC 命令或者 PRINT执行含有 OUT参数的存储过程 使用 PL/SQL 块编辑程序调用含有 OUT …

智慧公厕是如何诞生的?

在城市化进程中&#xff0c;公共卫生设施的建设一直是重要议题之一。而随着科技的不断发展&#xff0c;智慧公厕作为一种创新的解决方案&#xff0c;逐渐成为了现代城市管理的亮点。那么&#xff0c;智慧公厕是如何产生的呢&#xff1f; 一、城市化进程的推动 城市人口的增加和…

排序 “壹” 之插入排序

目录 ​编辑 一、排序的概念 1、排序&#xff1a; 2、稳定性&#xff1a; 3、内部排序&#xff1a; 4、外部排序&#xff1a; 二、排序的运用 三、插入排序算法实现 3.1 基本思想 3.2 直接插入排序 3.2.1 排序过程&#xff1a; 3.2.2 代码示例&#xff1a; 3.2.3…

基于通达信---做T专用算法

什么是做T? 股票做T是股票市场中常见的一种投资策略,也就是股票进行T+0操作,通过当天买进的股票,在当天卖出,是股市中常见的一种超短线的操作。其中T就是指交易日,利用交易日中的股票涨跌来赚取差价。股票做T常见的类型就是正T和倒T。 1、正T 股票做正t就是指先买后卖,…

【Java框架】Spring框架(一)——Spring基本核心(IOC/DI)

目录 Java企业级框架企业级系统EJB概念解析EJB与Spring的恩怨情仇 Spring系统架构1. Data Access/Integration&#xff08;数据访问&#xff0f;集成&#xff09;2. Web 模块3. Core Container&#xff08;Spring 的核心容器&#xff09;4. AOP、Aspects、Instrumentation 和 M…

javaWeb项目-智能仓储系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JSP技术 JSP(Jav…

一文讲透彻Redis 持久化

文章目录 ⛄1.RDB持久化&#x1fa82;&#x1fa82;1.1.执行时机&#x1fa82;&#x1fa82;1.2.RDB原理&#x1fa82;&#x1fa82;1.3.小结 ⛄2.AOF持久化&#x1fa82;&#x1fa82;2.1.AOF原理&#x1fa82;&#x1fa82;2.2.AOF配置&#x1fa82;&#x1fa82;2.3.AOF文件…

【日常】不要去期待周末

努力搬砖的日子&#xff0c;周末往往被视为人们放松和休息的时间&#xff0c;盼望着周末的到来&#xff0c;能短暂摆脱掉工作或学业上的束缚&#xff0c;通过尽情“放纵”来麻痹一下自己。 打工人每个工作日最开心的事&#xff0c;莫过于起床后扳着手指头&#xff0c;想想今天…

浅谈 刷算法题时遇到运行超时异常 的解决办法

文章目录 一、背景介绍二、解决办法2.1 C/C 语言2.2 Java 语言2.2.1 ACM模式下 Java的I/O原理 三、模板详情 一、背景介绍 最近在牛客、leetcode 刷算法题时发现一个奇怪的问题&#xff0c;明明解题思路、所用算法与题解一致&#xff0c;并且在本地IDE运行是通过的&#xff0c…

【C语言__结构体__复习篇5】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

Java 对称加密AES、DES的实现

1.AES、DES的介绍 1.1.AES介绍 AES&#xff08;Advanced Encryption Standard&#xff0c;高级加密标准&#xff09;的出现&#xff0c;是因为以前使用的DES算法密钥长度较短&#xff0c;已经不适应当今数据加密安全性的要求&#xff0c;因此2000年10月2日&#xff0c;美国政…