C++STL的list(超详解)

文章目录

  • 前言
    • 构造函数
    • capacity
    • list的访问
    • insert
    • swap
    • sort

前言

在这里插入图片描述
看一下list, 在任意位置可以进行O(1)插入删除的操作。
它怎么实现这个东西?它其实就是一个带头双向循环链表。

#成员函数

构造函数

在这里插入图片描述
这里面的构造函数学完string和vector之后已经相当熟悉了。

capacity

在这里插入图片描述
它没有resize和reserve,为什么?
它没有扩容这个玩法,它是链表。

list的访问

链表和vector、string的最大区别是什么?
它不支持【】,不能像数组一样访问。

list严格来说,要遍历和修改它,就只有一种方式,迭代器。
在这里插入图片描述

insert

在这里插入图片描述

list和vector一样,没有提供它自己的find
在这里插入图片描述

swap

把链表的头指针机型交换就可以了。

sort

sort很值得仔细讲一下

为什么算法库提供了一个sort,list它还要自己提供一个sort?
最主要的是算法库提供的sort,list用不了。

看算法库里面的sort做了什么事情。
在这里插入图片描述
这块减的时候出问题了。
算法库里面的sort是用快排实现的,快排要解决最坏的问题,就要用分数取中。
有左边和右边,直接算出中间的位置进行访问,链表不行。

在这里插入图片描述
迭代器的类型跟什么有关系呢?
跟容器的底层结果有关。

从功能上来说,迭代器的类型分三种。

1.单向迭代器,只能++ 不能- - ,比如单链表
2.双向迭代器,可以++, - -,比如双向链表。
3.随机迭代器,可以++,- -,+,-,比如vector, string.

要求双向可以传随机。要求单向可以传双向。
你可以认为双向是一个特殊的单向,随机也是一个特殊的单向。

基于上述的原因,也就明白list为什么有一个单独的sort.
不过链表在90%的情况下都不会用这个sort,因为它的性能不行。

list提供的sort底层用的是归并排序,归并排序本身效率也不错,但是由于种种原因。
给大家测试一下。

list当中同样的数据,一个放到直接用list提供的sort进行排序,
另一个拷贝到vector然后进行排序,最后拷贝回去。
比较一下这两者之间的效率。
在这里插入图片描述

差距还是很大的。
在这里插入图片描述

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

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

相关文章

axios请求拦截和响应拦截

Axios的请求拦截器和响应拦截器都是非常有用的工具,它们可以在请求发送到服务器之前或响应返回到客户端之前进行干预。 请求拦截器: 请求拦截器是在发送请求之前执行的,可以在请求拦截器中对请求进行一些预处理,比如设置统一的请…

如何将用户有过行为的item用list形式记录下来,另外如何计算list里的个数

导语: 最近做项目,发现有些语法想一想是知道,但实际操作起来跟想的情况不一样哈哈。不是遇见bug就是输出的结果不是自己想要的,CSDN跟知乎找了很多没怎么解决,后面多摸索多实操终于解决! test_data[item_…

数据结构-05-跳表SkipList

1-什么是跳表 跳表SkipList是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为 O(logN)(大多数情况下,因为是实现上是概率问题),因为其性能匹敌红黑树且实现较为简单…

msvcr110.dll丢失的解决方法有哪些-常见方法教程

我们在日常使用电脑中经常遇到各种问题,比如系统文件丢失是最常见的,其中msvcr110.dll丢失也是非常常见的问题,那么msvcr110.dll文件为什么会丢失,丢失对电脑有什么影响呢,丢失了有什么解决方法?今天小编就…

Synchronized 优化

目录 前言 重点 一、 轻量级锁 二、锁膨胀 三、重量锁 四、偏向锁 五、其他优化 我的其他博客 前言 Java synchronized 是一种机制,可以保证多个线程在访问共享资源时的同步性。synchronized 关键字可以用于方法或代码块上,当一个线程获取了这个对…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接:leetcode使用最小花费爬楼梯 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求达到楼梯顶部的最低花费. 由题可得: cost[i] 是从楼梯第 i 个…

第6章:知识建模:概述、方法、实例

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

java--LinkedHashSet集合的底层原理和TreeSet集合

1.LinkedHashSet底层原理 ①依然是基于哈希表(数组、链表、红黑树)实现的 ②但是,它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。 2.TreeSet ①特点:不重复、无索引、可排序(默认升序排序,按照元素的大小,由…

Android-Framework 异常重启原因log检索之关键字搜索

ap层重启原因记录 "bootstat: Canonical boot reason:" kernel层重启原因 "Power-on reason:" ap层crash原因 "beginning of crash" ap层system_server挂掉后重启 "androidboot.modespecial" "special-systemserver-di…

《微信小程序开发从入门到实战》学习四十八

4.5 实现投票小程序服务端功能 前面开发投票小程序时还有一些服务端的功能没有实现,当时以//todo标注,以测试数据完成基本功能。现在学习了云开发技术,就可以实现投票小程序的服务端功能了 4.5.1 完成创建投票功能 首先,在app.…

Nacos热更新(动态获取配置)

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️&#…

el-date-picker 限制选择范围最大为一年,设置快捷选项,设置默认时间

el-date-picker 限制选择范围最大为一年&#xff1a; 主要代码为&#xff1a;:picker-options"pickerOptions" 以及 blur"pickerBlur" <el-date-pickerv-model"transactionTime"type"daterange"style"width: 200px"size…

盒马补贴量价-2021KDD

概述&#xff1a; 电商商品定价三个关键问题&#xff1a; 在只有观测数据的时候&#xff0c;怎么构建价格弹性&#xff0c;现在来看这就是一个反事实推断的问题&#xff0c;不仅是如何做的问题&#xff0c;还有如何评估的问题。长周期的规划决策问题怎么建模 & 求解&#…

包管理工具npm与yarn

1.npm 1.1 安装 安装node后自带了npm 2.2 初始化package.json npm init 1.3 安装包 单个包&#xff1a;npm install less或npm i less 所有包&#xff1a;npm installnpm i 1.4 删除包 npm remove less&#xff0c;npm r less或npm uninstall less 1.5 配置别名 pack…

big.js常用方法

安装big.js npm install --save big.js引入插件 import Big from big.js创建Big number数据 const number new Big(.1) 或者 const number Big(.1)判断数据相等&#xff0c;比较值的大小 const number1 new Big(.3) const number2 Big(.3) number1.eq(number2) // tru…

从零开始学UniApp微信小程序开发:头部适配技巧让你事半功倍!

在 UniApp 中&#xff0c;在微信小程序开发中&#xff0c;头部适配可以通过修改 pages.json 中的 navigationStyle 配置项来实现&#xff0c;具体操作步骤如下&#xff1a; 1.进入 pages.json 文件 在 UniApp 项目的根目录中找到 pages.json 文件&#xff0c;打开该文件。 2…

Win11专业版,eNSP启动失败,错误代码40 解决方法

微软Win11系统默认开启的 Virtualization-based Security &#xff08;VBS&#xff09;“基于虚拟化的安全性”会导致游戏、跑分性能下降。VBS 基于虚拟化的安全性&#xff0c;通常称为内核隔离。使用硬件虚拟化在内存中创建安全区域&#xff0c;为其他安全功能提供了一个安全平…

git相关操作和命令

只发布某个节点的分支代码&#xff08;创建本地分支&#xff0c;切换到那个节点的代码&#xff09; 创建本地分支 git checkout -b dev-hyyj1212 origin/dev-hyyj 重置代码到d76fd1fa这个节点的代码 git reset --hard d76fd1fa -------------------------------------------…

python——第十六天

面向对象——继承 class RichMan(object): def __init__(self): self.money 1000000000 self.company "阿里巴巴" self.__secretary "小蜜" def speak(self): print(f"我对钱不感兴趣&#xff0c;我最后悔的事&#xff0c;就是创建了{self.company…

Appilied energy论文复现:含多类型充电桩的电动汽车充电站优化配置方法程序代码!

本程序参考Applied energy论文《Optimal planning of electric vehicle charging stations comprising multi-types of charging facilities》&#xff0c;文中主要对多类型充电桩的电动汽车充电站进行优化配置&#xff0c;程序较为简单和基础&#xff0c;具有较强的可扩展性和…