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

2.list数据结构
list是由双向链表实现的,因此内存空间是不连续的。
只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);
但由于链表的特点,能高效地进行插入和删除。

3.vector和list的区别
我们看一个简单的vector和list使用示例:

#include<iostream>
#include<vector>
#include<list>
using namespace std;
int main()
{vector<int> v;list<int> l;for(int i=0;i<8;i++) 往v和l中分别添加元素{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没有重载+itl++; //list::iterator中重载了++,只能使用++进行迭代访问。itl++;cout<<*itv<<endl;cout<<*itl<<endl;getchar();return 0;
}

vector拥有一段连续的内存空间,能很好的支持随机存取,
因此vector<int>::iterator支持“+”,“+=”,“<”等操作符。

list的内存空间可以是不连续,它不支持随机访问,
因此list<int>::iterator则不支持“+”、“+=”、“<”等

vector<int>::iterator和list<int>::iterator都重载了“++”运算符。

总之,如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;
如果需要大量的插入和删除,而不关心随机存取,则应使用list。

分类: C/C++

转载于:https://www.cnblogs.com/jswu-ustc/p/8554480.html

vector和list的区别相关推荐

  1. Java并发编程之:Vector和ArrayList的区别

    2019独角兽企业重金招聘Python工程师标准>>> Java中Vector和ArrayList的区别 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是Arr ...

  2. vector和deque的区别?

    vector和deque的区别? vector概述 vector的数据结构 vector的构造与内存管理 deque deque概述 deque的构造与内存管理 vector和deque的区别 vec ...

  3. vector 和 list 的区别,应用

    vector 和 list 的区别,应用 1)Vector 2.List 3.应用 1)Vector 连续存储的容器,动态数组,在堆上分配空间 底层实现:数组 两倍容量增长: vector 增加(插入 ...

  4. 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList

    [重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...

  5. C++ vector和list的区别

    C++ vector和list的区别 1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变. 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连 ...

  6. 【C++容器】数组和vector、array三者区别和联系

    目录 一.数组 二.向量vector 三.数组与vector的对比 array和vector,数组三者区别和联系 共同点 不同点 作者:bandaoyu,本文不断更新,源文:https://blog. ...

  7. Java Vector与ArrayList的区别

    俗话说最危险的地方最安全,写Java代码的时候Vector估计是最常用的集合类了,ArrayList用得也不少.不过关于这两个类有什么区别竟然从来就没去关注过,直到今天才偶然发现这两个类其实有重大区别 ...

  8. c语言实现容器,C语言三种容器:list vector和deque的区别

    在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担.还有一个就是容器,你会发现要是自己写一个链表.队列,或者是数组的时候,既要花时间还要操心怎么 ...

  9. C++ vector和list的区别及使用场景

    区别: 1.vector底层是连续结构:list底层是非连续结构 2.vector支持随机访问:list不支持随机访问 3.vector迭代器是原生指针:list迭代器是封装结点的一个类 4.vect ...

最新文章

  1. SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
  2. 单片机是否为嵌入式技术,单片机和嵌入式学哪个?
  3. MyBatis的入门知识
  4. IIS应用池保持激活工具开发
  5. 64位的Mac OS X也有Windows.Forms了
  6. 【数据结构与算法】【算法思想】【MySQL数据库索引】B+树
  7. python实现语义分割_如何用PyTorch进行语义分割?一文搞定
  8. [Python] Request module
  9. Oracle表字段的增加、删除、修改和重命名
  10. NFine.Framework框架去除cookie后门方法
  11. 粉红噪音测试软件,煲耳机方法二:粉红噪音
  12. Django中文文档
  13. 为什么网站总显示服务器不能创建对象,IE浏览器出现“Automation 服务器不能创建对象”解决教程...
  14. 国家码信道顺从表(含数据库和配置)
  15. 分布式光伏系列:分布式光伏电站 运行与维护方案一览(zz)
  16. k8s---adm构建
  17. mac系统怎么打开ftp服务器,mac系统怎么打开ftp服务器
  18. 操作系统学习笔记(5. 文件管理)
  19. 图像的基本操作--反转、放大等
  20. 支付宝当面付扫码支付支付后不回调_码云上不错的几个支付相关的项目

热门文章

  1. Windows 安装Docker 打包镜像
  2. 我们都进入了一个误区,其实面试官 “ 回去等通知 ” 不等于没戏....
  3. Java JDK 动态代理
  4. matlab合理分配席位_走进民航一线——首都机场机位分配员的24小时
  5. AppNinja 开发手记4: dmg kernelcache解密命令
  6. onshow 和 onload 的区别
  7. 移动端适配指南!聊聊安卓折叠屏给交互设计和开发带来的变化
  8. 2011年老古董MacbookPro(MD314 二代i7+SSD)升级macOS + windows11日记 - 双系统
  9. 使用PowerDesigner画ER图详细教程
  10. 英文SEO采集伪原创软件Kontent Machine注册使用实战教程!