vector

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 【6月更文挑战第17天】

1. 容器概述

1.1 vector

  • 动态数组vector基于动态数组实现,这意味着它的元素在内存中是连续存储的。
  • 随机访问:由于元素的连续性,vector支持快速的随机访问。

1.2 list

  • 双向链表list基于双向链表实现,每个元素通过指针连接到前一个和后一个元素。
  • 非连续存储:元素在内存中不是连续存储的,这使得元素的插入和删除操作更加灵活。

2. 性能比较

2.1 访问速度

  • vector提供了O(1)时间复杂度的随机访问能力,可以直接通过索引访问元素。
  • list的访问速度较慢,需要O(n)时间复杂度来访问特定位置的元素。

2.2 插入和删除

  • vector在中间插入或删除元素时,需要移动插入点后的所有元素,时间复杂度为O(n)。
  • list可以在O(1)时间内完成元素的插入和删除,只需调整相邻节点的指针。

2.3 内存使用

  • vector通常使用较少的额外内存,因为它是连续存储的。
  • list由于需要存储额外的指针,所以每个元素的内存开销更大。

3. 功能特性

3.1 容量管理

  • vector会自动管理其容量,当需要更多空间时会进行扩容操作。
  • list没有容量的概念,因为它不预先分配内存。

3.2 迭代器失效

  • vector中,插入或删除操作可能会使迭代器失效。
  • list的迭代器在插入和删除操作后仍然有效,除非被删除的元素的迭代器。

4. 适用场景

4.1 使用vector的场景

  • 当你需要快速随机访问元素时。
  • 当插入和删除操作不频繁,或者主要在容器的末端进行时。
  • 当内存使用是一个考虑因素时。

4.2 使用list的场景

  • 当你需要频繁地在容器中间插入或删除元素时。
  • 当你需要一个双向可迭代的容器时。
  • 当元素的大小较大,且不希望因插入操作而移动大量元素时。

5. 实例代码

5.1 使用vector

#include <vector>
#include <iostream>

int main() {
   
    std::vector<int> vec = {
   1, 2, 3, 4, 5};
    vec.push_back(6); // 在末尾添加元素
    for (int num : vec) {
   
        std::cout << num << " ";
    }
    return 0;
}

5.2 使用list

#include <list>
#include <iostream>

int main() {
   
    std::list<int> lst = {
   1, 2, 3, 4, 5};
    lst.insert(lst.begin(), 0); // 在开始处插入元素
    for (int num : lst) {
   
        std::cout << num << " ";
    }
    return 0;
}
目录
相关文章
|
监控 数据可视化 安全
如何使用webgl(three.js)实现煤矿隧道、井下人员定位、掘进面、纵采面可视化解决方案——第十九课(一)
three.js、webgl、3D煤矿隧道、三维井下人员定位、掘进面三维可视化、纵采面可视化、采集面可视化展示、设备检测、数字孪生、物联网3D、3d建筑、3d库房,bim管理系统
554 1
|
XML Java 关系型数据库
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
3489 0
|
iOS开发 MacOS
Mac用户无权限修改/usr/bin目录
对于Mac OS X 10.11 El Capitan用户,由于系统启用了SIP(System Integrity Protection), 导致root用户也没有权限修改/usr/bin目录。
2526 0
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
【7月更文挑战第2天】Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
|
8月前
|
XML JSON API
淘宝商品详情(item get)API接口系列,示例说明参考
淘宝商品详情(item_get)API接口是淘宝开放平台(Taobao Open Platform)提供的一个重要接口,允许开发者通过HTTP请求获取淘宝商品的详细信息。以下是对该接口系列的示例说明参考
|
机器学习/深度学习 运维 监控
从 2023 CCF AIOps 挑战赛看日志异常检测
2023年的 CCF AIOps 挑战赛相较往年主要有以下不同:赛题的形式从命题式转变为开放式、比赛场景的丰富度进一步提升。
135356 4
从 2023 CCF AIOps 挑战赛看日志异常检测
|
11月前
|
机器学习/深度学习 传感器 数据采集
使用Python实现深度学习模型:智能设备故障预测与维护
【10月更文挑战第10天】 使用Python实现深度学习模型:智能设备故障预测与维护
1499 2
|
人工智能 并行计算
matlab下的并行循环
解决matlab多层for导致运行速度慢的问题
517 1
|
安全 数据安全/隐私保护 网络架构
什么是TACACS+协议?
【4月更文挑战第12天】
875 2
|
存储 JavaScript 前端开发
.env.development是什么
.env.development是什么
399 0