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

【C++】vector和list的区别

1. vector

  • vector和数据类似,拥有一段连续的内存空间,并且起始地址不变
  • vector能高效的进行随机存取,时间复杂度为o(1)
  • 因为vector内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)
  • 当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝

2. list

  • list是由双向链表实现的,因此内存空间不是连续的
  • 只能通过指针访问数据,所以list的随机存取效率非常低,时间复杂度为o(n)
  • 但是由于链表的特点,插入和删除比较高效

3. vector和list的区别

  • vector拥有一段连续的内存空间,能很好的支持随机存取
  • list的内存空间是不连续的,不支持随机访问

4. 代码

#include<iostream>
#include<vector>
#include<list>
using namespace std;int main()
{vector<int> v;list<int> l;//往v和l中分别添加元素for(int i=0; i<8; i++) {v.push_back(i);l.push_back(i);}cout << "v[2]=" << v[2] << endl;//cout << "l[2]=" << l[2] << endl;  //编译错误,list没有重载`[]`cout << (v.begin()<v.end()) << endl; //cout << (l.begin() < l.end()) << endl; /编译错误,list::iterator没有重载 `<` 和 `>`cout << *(v.begin()+1) << endl;//cout << *(l.begin()+1) << endl; //编译错误,list::iterator没有重载`+`vector<int>::iterator itv = v.begin();list<int>::iterator itl = l.begin();itv = itv + 2;//itl = itl + 2; //编译错误,list::iterator没有重载+itv++; itl++;	//list::iterator中重载了++,只能使用++进行迭代访问。cout << *itv << endl;cout << *itl << endl;getchar();return 0;
}

5. 总结

  • 如果需要高效的存取,不在乎插入和删除的效率,使用vector
  • 如果需要大量的插入和删除,不需要随机存取,则使用list

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 004——双向链表和循环链表
  • 慎投!又一单位发布2024年高中风险预警期刊名单
  • Python | Leetcode Python题解之第389题找不同
  • Mac快速复制和删除命令
  • 编程珠玑3-6
  • wofstream写入文件没有反应的解决方案
  • 【腾讯云】AI驱动的数据库TDSQL-C如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图
  • 基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)
  • RS485工业通信网关原理详解-天拓四方
  • 2023下半年软考网络规划
  • Qt事件处理机制
  • 记一次Hiveserver2连接异常的解决-腾讯云-emr
  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 数据结构(7.2_1)——顺序查找
  • 彻底理解Proxy和Reflect
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Hibernate【inverse和cascade属性】知识要点
  • java2019面试题北京
  • Mysql数据库的条件查询语句
  • VUE es6技巧写法(持续更新中~~~)
  • vue2.0项目引入element-ui
  • XML已死 ?
  • 阿里云前端周刊 - 第 26 期
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 简单易用的leetcode开发测试工具(npm)
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 三分钟教你同步 Visual Studio Code 设置
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 智能合约Solidity教程-事件和日志(一)
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ######## golang各章节终篇索引 ########
  • #FPGA(基础知识)
  • #QT项目实战(天气预报)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (1)(1.13) SiK无线电高级配置(五)
  • (160)时序收敛--->(10)时序收敛十
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (回溯) LeetCode 78. 子集
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • .Net 6.0 处理跨域的方式
  • .net 7 上传文件踩坑
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 设计模式初探
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • ?
  • @NestedConfigurationProperty 注解用法
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [20190416]完善shared latch测试脚本2.txt
  • [ABC275A] Find Takahashi 题解
  • [Android]Android开发入门之HelloWorld
  • [AutoSAR 存储] 汽车智能座舱的存储需求