浅谈list与vector的区别

2023-11-09

目录

前言

一、list和vector为何有区别

二、链表和顺序表(数组)的优缺点(即list和vector优缺点)



前言

        在学习完list和vector这两个运用最广泛的容器后我们发现这两个容器有许多相似的用法,甚至在大多时候(有时候不行,后文会提到)这2个容器能直接相互替换,此时我们可能会有些疑问,这么多重复的内容为啥不能把这2个容器相互借鉴一下,直接把搞成一个容器呢?

        我们此时跳出来看另一个问题,穿越回到古代,你选择诸葛亮当你的军师还是选项羽挂帅征战,其实这也是上文的相同问题,这两个容器看起来效果一样但是在不同的情况下,这2个容器的有不同的优势,甚至在某些情况下它们是不可替代的。

一、list和vector为何有区别

首先我们知道list和vector是来源stl标准库,而STL内每一个容器都是在C语言的基础上由前人总结出常用的数据结构再封装提供统一接口而来。

所以,我们可以得出一个结论每一个容器都是对应的一种数据结构,那么list和vector的数据结构是啥呢?当然是链表和顺序表(数组)

二、链表和顺序表(数组)的优缺点(即list和vector优缺点)

             

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



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

浅谈list与vector的区别 的相关文章

随机推荐

  • 静态时序分析的基本方法06

    其他芯片变化相关分析模式 随着制造工艺越来越先进 在时序分析规模不断增大的同时 对时序分析精度的要求也越来越高 因此常规的芯片变化相关分析模式已经无法满足当前更高级的时序分析要求 本节将介绍两种更高级的芯片变化相关分析模式 高级芯片变化相关
  • flask

    Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question Dismiss Announcing Stack Overflow Documentati
  • CAM(Content-Addressable Memory)介绍

    1 CAM介绍 标准存储器RAM查找方式为通过地址查找相应地址的数据 而CAM为通过数据查找相应地址 实现了更快的数据搜索 CAM中 每个地址只能存储唯一数据 但特定的数据可以存在多个地址中 当写入发现地址冲突时 删除原来的旧数据 2 实现
  • Spring4深入理解----事务(声明式事务和xml配置事务,事务传播属性,事务其他属性(隔离级别&回滚&只读&过期))

    参考代码下载github https github com changwensir java ee tree master spring4 事务管理是企业级应用程序开发中必不可少的技术 用来确保数据的完整性和一致性 事务就是一系列的动作 它
  • BZOJ4345 [POI2016]Korale

    在病房里日题真是一种独特的体验 首先考虑求第一问 我们先把所有元素排序 我们用优先队列维护选数的集合 对每个集合维护集合里的元素的和v和最后一个元素 即最大的元素 lst 初始的时候我们把只包含最小元素的集合推入队列 那么我们取出一个队头元
  • 苹果cms采集非html的视频,苹果cms采集完没有播放地址的解决方法

    这篇文章主要为大家详细介绍了苹果cms采集完没有播放地址的解决方法 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 有需要的朋友可以收藏方便以后借鉴 苹果cms采集完没有播放地址 这种情况一般是新手经常遇到到的常见问题 如果需要查询问题的
  • 构建高可用分布式Key-Value存储服务

    构建高可用分布式Key Value存储服务 前言 当我们构建服务端应用的时候 都会面临数据存放的问题 不同的数据类型有不同的存放方式 譬如关系型数据通常使用MySQL来存储 文档型数据则会考虑使用MongoDB 而这里 我们仅仅考虑最简单的
  • MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令 它可以对 SELECT 语句进行分析 并输出 SELECT 执行的详细信息 以供开发人员针对性优化 EXPLAIN 命令用法十分简单 在 SELECT 语句前加上 Explain 就可以了
  • SpringBoot之logback-spring.xml详细配置

    logback官网 各种指导文件 有空自己去看 比如 我们需要调整的是布局 直接看Layouts pom xml
  • GIF动态图制作

    GIF动态图制作
  • JavaWeb项目实训——如何做一个jsp网页

    前提 成功安装配置了eclipse Jee tomcat9等 流程 设置编码格式为UTF 8 引入jar包 建立一个jsp文件 引入tomcat 浏览器查看网页 设置编码格式为UTF 8 设置js文件的默认编码格式为UTF 8 在Windo
  • 卸载vivo手机自带的应用程序

    https bbs nubia cn thread 960835 1 1 html vivo应用列表 http bbs xiaomi cn t 13228624 n3 小米可删应用 1 下载刷机大师 2 手机开启usb调试连接到电脑 3 手
  • Already up to date.问题解决

    一般在进行git操作的时候出现Already up to date 问题有两种情况 git合并分支遇到的问题 发现合并上去以后会被覆盖 这个时候你要检查一下自己的写文件顺序 检查顺序 一 当前分支的文件和远程仓库的文件不统一 这时候就需要将
  • 第2章 数据类型,运算符和表达式总结

    一 先举一个简单的例子 首先第1行是我们必不可少的头文件 其次从左至右那个int为返回参数 中间是方法名 可自定义 然后括号里面的是输入参数 那个中括号或者的是一个整体 下一行就是输出函数 括号内是输出内容 需要用双引号标注 然后就用分号结
  • Ajax实现异步请求的整个过程

    var xhr xhr new XMLHttpRequest 创建一个异步对象 xhr open Get test ashx true Get方式括号中的三个参数分别为 1 发送请求的方式 2 样请求的页面 3 是否异步 xhr open
  • 机器学习(一)——K-近邻(KNN)算法

    机器学习 一 K 近邻 KNN 算法 最近在看 机器学习实战 这本书 因为自己本身很想深入的了解机器学习算法 加之想学python 就在朋友的推荐之下选择了这本书进行学习 一 K 近邻算法 KNN 概述 最简单最初级的分类器是将全部的训练数
  • 【Blender】基础物体建模(5)

    Blender 布尔运算不起作用怎么办 当两个物体执行了布尔之后 不起作用 2 先检查每个物体的面是否是封闭的 可以看到是全部封闭的 3 注意 当我们执行了布尔时 有一个物体会变成线框 此时只需将物体属性中的视图显示修改为实体即可 4 开始
  • 2015C蓝桥杯第五题九数组分数

    题目 1 2 3 9 这九个数字组成一个分数 其值恰好为1 3 如何组法 下面的程序实现了该功能 请填写划线部分缺失的代码 include
  • Frontiers in Neuroscience:弥散张量成像(DTI)研究指南

    弥散张量成像 DTI 的研究越来越受到临床医生和研究人员的欢迎 因为它们提供了对脑网络连接的独特见解 然而 为了优化DTI的使用 必须考虑到几个技术和方法方面的问题 因为这些问题会影响到DTI研究结果的准确性和可重复性 本文由葡萄牙学者发表
  • 浅谈list与vector的区别

    目录 前言 一 list和vector为何有区别 二 链表和顺序表 数组 的优缺点 即list和vector优缺点 前言 在学习完list和vector这两个运用最广泛的容器后我们发现这两个容器有许多相似的用法 甚至在大多时候 有时候不行