第八章:list类

news2024/11/25 13:29:26

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • list的介绍及使用
    • list的介绍
    • list的使用
      • list的构造函数
      • list的迭代器
      • list的容量
      • list的成员访问
      • list的增删改查
  • list与vector的对比
  • 总结


前言

list是STL的一种链表类,可以在常数范围内在任意位置进行插入和删除的序列式容器。


list的介绍及使用

list的介绍

list的文档介绍

  1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
  2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向
    其前一个元素和后一个元素。
  3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高
    效。
  4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率
    更好。
  5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)

在这里插入图片描述

list的使用

在这里插入图片描述

list的构造函数

在这里插入图片描述

在这里插入图片描述

构造函数( (constructor))接口说明
list (size_type n, const value_type& val = value_type())构造的list中包含n个值为val的元素
list()构造空的list
list (const list& x)拷贝构造函数
list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list

list的构造使用代码演示

list的迭代器

在这里插入图片描述

函数声明接口说明
begin +end返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器
rbegin +rend返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置

在这里插入图片描述

  1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
  2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动list的迭代器使用代码演

list的迭代器使用代码演示

list的容量

在这里插入图片描述

函数声明接口说明
empty检测list是否为空,是返回true,否则返回false
size返回list中有效节点的个数

list的成员访问

在这里插入图片描述

函数声明接口说明
front返回list的第一个节点中值的引用
back返回list的最后一个节点中值的引用

list的增删改查

在这里插入图片描述

函数声明接口说明
push_front在list首元素前插入值为val的元素
pop_front删除list中第一个元素
push_back在list尾部插入值为val的元素
pop_back删除list中最后一个元素
insert在list position 位置中插入值为val的元素
erase删除list position位置的元素
swap交换两个list中的元素
clear清空list中的有效元素

list的插入和删除使用代码演示

list与vector的对比

vectorlist
底 层 结 构动态顺序表,一段连续空间带头结点的双向循环链表
随 机 访 问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素 效率O(N)
插 入 和 删 除任意位置插入和删除效率低,需要搬移元素,时间复杂 度为O(N),插入时有可能需要增容,增容:开辟新空 间,拷贝元素,释放旧空间,导致效率更低任意位置插入和删除效率高,不 需要搬移元素,时间复杂度为O(1)
空 间 利 用 率底层为连续空间,不容易造成内存碎片,空间利用率 高,缓存利用率高底层节点动态开辟,小节点容易 造成内存碎片,空间利用率低, 缓存利用率低
迭 代 器原生态指针对原生态指针(节点指针)进行封装
迭 代 器 失 效在插入元素时,要给所有的迭代器重新赋值,因为插入 元素有可能会导致重新扩容,致使原来迭代器失效,删 除时,当前迭代器需要重新赋值否则会失效插入元素不会导致迭代器失效, 删除元素时,只会导致当前迭代 器失效,其他迭代器不受影响
使 用 场 景需要高效存储,支持随机访问,不关心插入删除效率大量插入和删除操作,不关心随 机访问

总结

list类是STL中的链表类,底层实现是带头双向循环链表。
人与动物真正的区别,在于他内在的、无形的力量和价值。——【印】泰戈尔

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

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

相关文章

【iOS】isKindOfClass和isMemberOfClass方法

前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解,也就是苹果官方这幅图: 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现,无论是谁调用isKindOfClass方法都会…

系统学习Linux-MySQL服务基础(一)

一、MySQL服务概述 什么是数据库? 将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合 数据库是存储、管理和操作组织化数据的软件系统 数据库能干什么? 企业应用存放用户数据、管理企业数据金融行业存储分析客户的财务…

Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%

Stable Diffusion是一种基于扩散模型的图像生成技术,能够从文本生成高质量的图像,适用于CG,插图和高分辨率壁纸等领域。 但是它计算过程复杂,使得它的生成速度较慢。所以研究人员就创造了各种提高其速度的方式,比如Xf…

Springboot读取配置的一些方式

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者在这个方面踩坑。 下面整理了几种获取配置属性的方式,弄清配置加载、读取的底层原理,一旦出现问题可以分析。 以下示例源…

Linux基础开发工具之Linux编译器的使用(gcc/g++)

目录 前言 1.背景知识介绍 2.预处理阶段 3.编译阶段 4.汇编阶段 5.链接过程 5.1 函数库 5.1.1 静态库和动态库 5.2 链接过程的具体内容 总结 前言 大家好呀,许久没给大家更新了,对于我们在Linux环境下编程,之前小编只是给大家介绍…

Ubuntu安装JDK与IntelliJ IDEA

目录 前言 Ubuntu安装JDK 1、更新软件包列表 2、安装OpenJDK 3、验证安装 Ubuntu安装IntelliJ IDEA 1、下载 IntelliJ IDEA 2、解压缩 IntelliJ IDEA 安装包 3、移动 IntelliJ IDEA 到安装目录 4、启动 IntelliJ IDEA 前言 APT(Advanced Package Too…

react 在build读取env 数据

默认会读取.env 文件 npm install dotenv --save npm install dotenv-cli --save-dev例如读取.env.test "build:test": "dotenv -e .env.test react-app-rewired build",.env.test REACT_APP_CURRENTMODE devREACT_APP_Public_Path "https://baid…

VUE中的生命周期、每个生命周期可以干什么

生命周期 就VUE来说就是一个程序的即将创建到销毁的一个过程,也就是vm对象实例从创建到最终销毁的过程。 VUE生命周期4个阶段8个钩子函数(到某一阶段自动调用的函数) 1.初始阶段(虚拟的DOM生成) beforeCreate() 初始化事件对象和生命周期…

width: calc(~“100% - 267px“);动态css 调样式

.result-filtering {color: #8b8b8b;display: flex;// width: 82.6%;width: calc(~"100% - 267px");}

证书文件无法生成.p12

做好的证书文件在生成.p12文件的过程中遇到了.p12选项置灰且无法选择并导出的情况 解决办法 起初认为生成的空白 CertificateSigningRequest 有问题,反反复复尝试几次制作后均无效; 而后发现问题出在了钥匙串访问的选项问题上 ... 将顶部菜单 tab 由"所有选项"切换至…

ActivityWatch配置跨平台同步(没弄完)

安装完后马上给你来个下马威&#xff1a; 具体内容如下&#xff1a; Traceback (most recent call last): File "aw_qt\__main__.py", line 3, in <module> File "click\core.py", line 1130, in __call__ File "click\core.py", l…

docker制作compose

第一步&#xff0c;先了解Compose是什么&#xff1f; Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。 Compose有两个重要的概念 1.项目 &#xff1a;由一组关联的应用容器组成的一个完整业务单元&#xff0c;在docker-compose.ym…

最受欢迎的8种编程语言解析_kaic

国内目前最受欢迎的8种编程语言解析 在过去的 17 个月&#xff08;2022 年 1 月至 2023 年 5 月&#xff09;时间里&#xff0c;DevJobsScanner 通过分析超 1400 万个开发人员职位&#xff0c;并从中筛选了有明确编程语言需求的职位&#xff0c;得出了在 2023 年需求量最大的 …

Socket基本原理详解

socket的概念 故事要从一个插头说起。 插头与插座 当我将插头插入插座&#xff0c;那看起来就像是将两者连起来了。 风扇与电力系统建立"连接" 而插座的英文&#xff0c;又叫socket。 巧了&#xff0c;我们程序员搞网络编程时也会用到一个叫socket的东西。 其实两者…

[算法通关村] 1.1 单向链表的创建

各位读者朋友们&#xff0c; 从今天开始&#xff0c;我将通过博文的形式&#xff0c;概述数据结构中应知必会的基本算法&#xff0c; 由于我更加熟悉 Java 语言&#xff0c;所以全程使用 Java 语言进行叙述&#xff0c; 如果您发现了文章中的错误&#xff0c;请您不吝赐教。 什…

HCIP——OSPF综合实验

OSPF实验 一、实验拓扑二、实验要求三、实验思路四、实验步骤1、配置接口IP地址以及环回2、配置缺省路由3、配置MGRE环境4、配置OSPF5、修改网络类型6、重发布7、配置汇总空接口防环8、配置特殊区域&#xff1a;9、配置NAT环境10、加快收敛11、配置接口认证12、测试 一、实验拓…

ModHeader插件

ModHeader浏览器插件下载装载地址&#xff1a;&#xff08;microsoftedge&#xff09;ModHeader - Modify HTTP headers - Microsoft Edge Addonshttps://microsoftedge.microsoft.com/addons/detail/modheader-modify-http-h/opgbiafapkbbnbnjcdomjaghbckfkglc?refidbingshor…

MySQL 主从复制的认识 2023.07.23

一、理解MySQL主从复制原理 1、概念&#xff1a;主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 2、作用&#xff1a;灾备、数据分布、负载平衡、读写分离、提高并发能力 3、原理图 4、具体步骤 (1) M…

微服务远程调用openFeign简单回顾

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件&#xff0c;可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…

生物信息学_玉泉路_课堂笔记_04 第四章 高通量测序技术与 数据分析

&#x1f345; 课程&#xff1a;生物信息学_玉泉路_课堂笔记 中科院_2022秋季课 第一学期 &#x1f345; 个人笔记使用 &#x1f345; 2023/7/19 测序技术 鸟枪法测序 全球测试仪的使用情况 边合成边测序 深颜色是加的接头 adapter 浅颜色的是要测的片段 insert ① 重叠的情…