vector和list区别【转】

2023-10-29

stl提供了三个最基本的容器:vector,list,deque。

vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。

list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。

deque是一个double-ended queue,它的具体实现不太清楚,但知道它具有以下两个特点:
它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几,它支持在两端的操作:push_back,push_front,pop_back,pop_front等,并且在两端操作上与list的效率也差不多。

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面
的原则:
  1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
  2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
  3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

 

 

vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高。在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,效率是很高的。

list中的对象是离散存储的,随机访问某个元素需要遍历list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改变元素的指针。

综上所述:

vector适用:对象数量变化少,简单对象,随机访问元素频繁

list适用:对象数量变化大,对象复杂,插入和删除频】

原文地址:http://w57w57w57.blog.163.com/blog/static/9607473520094751136967/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vector和list区别【转】 的相关文章

  • 如何在 C# 中使用窗口窗体创建动态下拉列表

    我正在尝试为朋友的手机商店构建一个简单的库存程序 我想使用C 并访问数据库来存储数据 DB 将有 2 个主要列表 devices 品牌 型号 颜色 价格 库存 最小库存 parts 品牌 型号 描述 库存 最小库存 GUI 将使用多个下拉列
  • Python:两个列表之间的成对比较:列表 a >= 列表 b?

    如果我想检查列表中的所有元素 a 1 2 3 6 大于或等于另一个列表中对应的元素 b 0 2 3 5 如果 a i gt b i 对于所有i的 则返回 true 否则返回 false 这有逻辑功能吗 比如a gt b 谢谢 你可以这样做
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如
  • 我应该如何格式化 .dat 文件以便制作 3D 矢量图?

    我正在为大学做这个编程任务 我们必须写一个c 计算 3D 空间中某些线圈的磁场矢量的程序 我已经成功编写了这个程序 并且我认为它运行得很好 不过 我想添加一个特殊的东西 这是我的试卷 所以它必须特别好 我想绘制出向量 我习惯打电话gnupl
  • Python 3 中的递归搜索 JSON/DICT

    我在 Python 3 中实现了一些 API 这些 API 允许我根据班级代码接收有关学校的信息 但我想知道如何通过类代码获取信息 例子 我输入代码GF528S我希望程序告诉我班级 3C INF 地址 Address 1 Milan 如果可
  • 如果我不定义向量大小,程序会崩溃

    最近在学习C 偶然发现这个问题 std vector
  • 如何推回向量的向量?

    我正在输入 20 行 我想用空格分隔每一行的内容并将其放入向量的向量中 如何制作向量的向量 我很难把它推回来 我的输入文件 Mary had a little lamb lalala up the hill the sun is up 该向
  • C# 如何单击 IList 中的 IWebelement?

    所以我尝试单击 YouTube 上的按钮 但我无法通过 Xpath 找到该按钮 因为按钮太多 所以我尝试将它们保存在 IList 中 现在我想单击列表中的特定按钮 ChromeDriver chrome new ChromeDriver L
  • 在 C++ 中将成对向量转换为两个独立向量的最快方法

    假设我有一个vector of pair
  • 使用 for 循环填充 python 字典列表

    我试图用 for 循环填充字典列表 但最终结果显示 for 循环填充的最后一个字典覆盖了所有先前字典的值 我尝试调整以下中提出的解决方案 如何使用循环填充 Python 字典 https stackoverflow com question
  • Python 将列表追加到列表中

    我正在尝试编写一个通过矩阵的函数 当满足条件时 它会记住该位置 我从一个空列表开始 locations 当函数遍历行时 我使用以下方法附加坐标 locations append x locations append y 函数末尾的列表如下所
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留
  • 使用字符串中的变量名称访问变量值,R

    Intro 一个数据集有大量的age year变量 age 1990 age 1991 etc 我有一个字符串值数组length age years 表示这些变量 使得age years 1 回报 age 1990 etc Need 我想搜
  • Scala 中的随机列表[重复]

    这个问题在这里已经有答案了 我对 scala 中的随机播放列表有疑问 使用scala util Random 例如我有 val a cyan val b magenta val c yellow val d key val color Ra
  • 通过引用传递向量

    如果我在一个类中有一个对象向量 我想在另一个类中更改它 我会尝试通过引用传递所有信息 我究竟需要通过引用传递什么 向量 物体 两个都 本质上我要问的是 它们之间有什么区别 vector blah A reference to a vecto
  • 使用 LINQ 通过一个属性比较两个列表

    假设我有以下内容 class Widget1 public int TypeID get set public string Color get set class Widget2 public int TypeID get set pub
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的

随机推荐

  • Gson的使用

    一 Gson的基本用法 生成json Gson gson new Gson User user new User 用户 28 String jsonObject gson toJson user name 用户 age 28 解析JSON
  • vue-格式化时间-封装时间过滤器

    一 全局封装时间处理过滤器 filter js export default function originVal const dt new Date originVal const y dt getFullYear const m dt
  • QT中QMainWindow、QWidget、QDialog的区别

    QMainWindow 详细描述 QMainWindow类提供一个有菜单条 锚接窗口 例如工具条 和一个状态条的主应用程序窗口 主窗口通常用在提供一个大的中央窗口部件 例如文本编辑或者绘制画布 以及周围菜单 工具条和一个状态条 QMainW
  • 2022 阿里全球数学竞赛获奖名单公布,其中 00 后选手占了一半多,如何评价这一现象?

    2022 阿里全球数学竞赛获奖名单公布 其中 00 后选手占了一半多 如何评价这一现象 写在前面 本届比赛共吸引55000余人报名 其中00后占比超4成 而在获奖的77人中 00后更是拿走了一半的奖项 00后 作为新时代科研新势力 正在慢慢
  • 系统接口日志记录-AOP

    在进行系统开发的时候 系统提供给前端或者第三方使用的接口 要对接口的调用情况 接口的接收的参数 返回的结果 调用者 调用接口的ip等 进行记录 通过Spring AOP的 环绕通知 可以很容易实现该功能 实现该功能对调用接口数据的记录也便于
  • zigbee中有几个不同的频率,是啥意思?有啥联系和区别

    zigbee中有几个不同的频率 是啥意思 有啥联系和区别 2011 05 30 09 03 cnsxgh 分类 工程技术科学 浏览1209次 channel 2405Mhz Pan ID 0x0628 工作频率 2 4Ghz 提问者采纳 2
  • JAVA中的时间大小比较

    1 时间的比较 import java text DateFormat import java text ParseException import java text SimpleDateFormat import java util D
  • Windows遇到ERR_NETWORK_ACCESS_DENIED处理方案

    问题描述 用了总部vpn 总是打不开总部资源 之前可以一直提示 禁止访问互联网ERR NETWORK ACCESS DENIED 郁闷了好几天 今天自己查查资料解决了 说明 问题总是能解决的 只是需要耐心 解决步骤 打开cmd 切以管理员身
  • window.open 使用方法总结

    1 最基本的弹出窗口代码 因为着是一段javascripts代码 所以它们应该放在之间 是对一些版本低的浏览器起作用 在这些老浏览器中不会将标签中的代码作为文本显示出来 要养成这个好习惯啊 window open test html 用于
  • 蓝牙之八-HFP

    HFP 在调试安卓的HFP client时遇到了如下问题 其中有一个E提示 因为AT命令的错误 所有创建SLC失败 然后断开RFCOMM链接 表现出来的是已经配对的手机不停的断开重连 HFP协议 HFP Hands free Profile
  • 2020重庆市法治理论知识考试答案查询收集

    重庆市法治理论知识考试平台考试题 下面就是搜集答案的代码 我得到的题目就下面这些 答案没放上来 我这也有 文档下载地址 链接 https pan baidu com s 1rLxqMdFUPxCjEVdpepq wg 提取码 dnyq 复制
  • 【HIT-软件构造】使用Gradle脱离IDE环境

    在软件构造实验中 我们将代码提交到GitHub仓库前 实验还要求我们使用其他工具build我们的实验代码以脱离环境 这些工具包括Ant Maven Gradle Travis CI等 然而这些构建工具不论是在线的还是离线的 都需要基于Gro
  • RestFul风格详解

    文章目录 一 前言 二 什么是RestFul风格 三 传统风格与RestFul风格对比 1 传统方式操作资源 2 RestFul方式操作资源 四 RestFul代码演示 1 代码展示 2 拓展情景 五 使用method属性指定请求类型 六
  • latex全文设置段间距_latex 标题、段落及行距

    资源 本文主要介绍了如何使用 titlesec 宏包设置各级标题样式 这里 是其官方手册 本文主要参考了该手册 如果想了解更多详情请直接查阅该手册 此外本文还对缩进 段距 行距的内容进行的简单的介绍 设置标题样式 标题样式的设置分为三个部分
  • 【leetcode刷题】-- 回文数(C++反转数组解法)

    题目链接 https leetcode cn com problems palindrome number 给你一个整数 x 如果 x 是一个回文整数 返回 true 否则 返回 false 回文数是指正序 从左向右 和倒序 从右向左 读都
  • 《生成对抗网络》综述(附257页ppt下载)

    地址 https sites google com view berkeley cs294 158 sp20 主要由UC伯克利教授Pieter Abbeel主讲 他曾师从吴恩达 现任伯克利机器人学习实验室主任 伯克利人工智能研究 BAIR
  • Python之小数转化为百分数

    1 有一个小数0 2233 我们需要将它转换成22 33 的形式 h 0 2233 print 2f h 100 这两行代码中 我们使用了三个百分符号 第一个百分符号靠近 2f 表示的就是以一个float的形式输出 2表示将保留两位小数进行
  • [ 环境搭建篇 ] 安装python环境并配置环境变量(附python3.10.3安装包)

    博主介绍 博主介绍 大家好 我是 PowerShell 很高兴认识大家 主攻领域 渗透领域 数据通信 通讯安全 web安全 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 文末有彩蛋 作者水平有限 欢
  • 从零实现RPC框架之:4协议设计

    前言 一提到协议 最先想到的可能是 TCP 协议 UDP 协议等等 这些网络传输协议的实现以及应用层的HTTP协议 其实rpc协议和http协议都属于应用层协议 可能你会问 前面你不是说了 HTTP 协议跟 RPC 都属于应用层协议 那有了
  • vector和list区别【转】

    stl提供了三个最基本的容器 vector list deque vector和built in数组类似 它拥有一段连续的内存空间 并且起始地址不变 因此它能非常好的支持随即存取 即 操作符 但由于它的内存空间是连续的 所以在中间进行插入和