当前位置: 首页 > article >正文

vector和list区别

一:基本定义

vector:

基于连续内存的动态数组。

提供随机访问。

list:

基于双向链表

每个元素是一个节点,节点间通过指针连接,支持任意位置插入和删除

二:底层数据结构

vector:

元素存储在连续的内存块中。

内部维护三个指针:begin,end,capacity

当容量不足时,重新分配更大内存并复制元素

list:

元素存储在非连续的节点中,每个节点包含数据、前指针和后指针。

节点间通过指针链接,形成双向链表

内存分配是分散的,按需分配。

三:内存布局

vector:

连续内存,元素紧凑排列。

优点:访问效率高

缺点:插入删除需移动元素

list:

非连续内存,节点分散。

优点:插入删除只需调整指针

缺点:访问效率低

四:访问方式

vector:

支持下标随机访问

时间复杂度:O(1)

list:

不支持随机访问,只能遍历。

访问第n个元素时间复杂度:O(n)

五:插入和删除

vector:

尾部:push_back和pop_back是O(1)(可能触发扩容)

中间/头部:insert和erase是O(n),需要移动元素。

扩容时可能重新分配内存并拷贝所有元素。

list:

任意位置:insert和erase是O(1),只需调整指针。

不涉及内存重新分配。

六:内存管理

vector:

预分配容量capacity,通过reserve可减少重新分配。

扩容时通常按倍增(如2倍)分配。

list:

按需分配,每个节点独立申请内存。

无需预分配。

七:迭代器失效

vector:

插入可能导致扩容,使所有迭代器失效。

删除或插入(非尾部)使后序迭代器失效。

list:

插入和删除只影响当前节点的迭代器。

八:元素存储开销

vector:

仅存储元素本身,无额外指针。

内存效率高。

list:

每个节点存储数据、前指针后指针

内存效率低。

原文地址:https://blog.csdn.net/lxy2977262881/article/details/146484835
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/612516.html

相关文章:

  • leetcode240.搜索二维矩阵||
  • Flask接口开发--引入mysql
  • Qt:QWebEngineView显示网页失败
  • Android 底部EditView输入时悬浮到软键盘上方
  • 无人机产教融合新方向,装调检修技术详解
  • 前缀和、差分
  • C语言--文件操作教案
  • Mybatis缓存模块分析-源码
  • C# SerialPort 类中清空缓存区的方法
  • 如何使用腾讯云HAI快速、高质量生成Stable Diffusion图片
  • vmwaretools解压失败|vmware tools distrib cannot mkdir read only file system|bug汇总
  • 2025年渗透测试面试题总结-某奇安信-Ateam(题目+回答)
  • Oracle初识:登录方法、导入dmp文件
  • Qt弹出新窗口并关闭(一个按钮)
  • JVM 概述/结构/架构/生命周期
  • 短信验证码安全需求设计
  • C语言 【实现电脑关机小游戏】非常好玩
  • 【Zookeeper搭建】Zookeeper分布式集群搭建完整指南
  • git中feature跟hotfix是什么意思
  • Python定时任务的高效实现:精准触发mutoubar()方法