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

C++之vector和list辨析

std::vectorstd::list 是 C++ 标准库中两种常用的容器,它们都用于存储和管理元素集合,但在底层实现和性能特性上有显著的区别。

1. 底层实现

  • std::vector:
    • 基于动态数组实现。
    • 元素在内存中是连续存储的。
    • 支持随机访问(通过下标访问元素)。
    • 当容量不足时,会重新分配更大的内存块,并将所有元素复制到新内存中。
  • std::list:
    • 基于双向链表实现。
    • 元素在内存中是非连续存储的,每个元素包含指向前后元素的指针。
    • 不支持随机访问,只能通过迭代器顺序访问。
    • 插入和删除操作不会导致内存重新分配。

2. 性能特性

操作std::vectorstd::list
随机访问O(1)(通过下标直接访问)O(n)(需要遍历链表)
尾部插入/删除O(1)(如果不需要扩容)O(1)
头部插入/删除O(n)(需要移动所有元素)O(1)
中间插入/删除O(n)(需要移动部分元素)O(1)(找到位置后直接插入/删除)
内存占用较小(仅存储元素,无额外开销)较大(每个元素需要额外存储两个指针)
缓存友好性高(元素连续存储,缓存命中率高)低(元素非连续存储,缓存命中率低)

3. 适用场景

  • std::vector:
    • 需要频繁随机访问元素的场景。
    • 元素数量变化不大,或者主要在尾部插入/删除元素的场景。
    • 对缓存性能要求高的场景。
  • std::list:
    • 需要频繁在任意位置插入/删除元素的场景。
    • 不需要随机访问元素的场景。
    • 元素数量变化较大的场景。

4. 实例

#include <iostream>
#include <vector>
#include <list>int main() {// std::vector 示例std::vector<int> vec = {1, 2, 3};vec.push_back(4); // 尾部插入vec.insert(vec.begin() + 1, 5); // 中间插入std::cout << "Vector: ";for (int v : vec) std::cout << v << " "; // 随机访问std::cout << std::endl;// std::list 示例std::list<int> lst = {1, 2, 3};lst.push_back(4); // 尾部插入lst.insert(std::next(lst.begin()), 5); // 中间插入std::cout << "List: ";for (int l : lst) std::cout << l << " "; // 顺序访问std::cout << std::endl;return 0;
}
http://www.lryc.cn/news/542905.html

相关文章:

  • 冯诺依曼体系结构 ──── linux第8课
  • EX_25/2/22
  • rust安装教程以及git连接到远程仓库
  • Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因
  • VC++零基础入门之系列教程 【附录E MFC快速参考指南】
  • 在CentOS 7下部署NFS的详细教程
  • LabVIEW C编译支持工具库CCompileSupp.llb
  • 【含文档+PPT+源码】基于微信小程序的农产品自主供销商城系统
  • MongoDB私人学习笔记
  • C++---了解STL
  • 智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践
  • 2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命
  • 计算机网络————(三)
  • 请谈谈 React 中的状态管理,如何使用 Context API 和 Redux 进行状态管理?
  • 【考研】复试相关上机题目
  • 利用机器学习实现实时交易欺诈检测
  • Modelfile配置说明
  • labview实现有符号位16进制转二进制补码转真值
  • 浏览器深度解析:打造极速、安全、个性化的上网新体验
  • JavaScript 简单类型与复杂类型-堆和栈
  • 【AI+智造】DeepSeek价值重构:当采购与物控遇上数字化转型的化学反应
  • 基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】
  • mapbox添加自定义图片绑定点击事件,弹窗为自定义组件
  • SVT-AV1接入ffmpeg说明
  • 基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets
  • OpenCV(6):图像边缘检测
  • 多模态人物视频驱动技术回顾与业务应用
  • 星海智算+ DeepSeek-R1:技术突破与行业应用的协同革新
  • 选择排序:简单高效的选择
  • 考研/保研复试英语问答题库(华工建院)