vector和list的区别
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。
转载于:https://www.cnblogs.com/jswu-ustc/p/8554480.html
vector和list的区别相关推荐
- Java并发编程之:Vector和ArrayList的区别
2019独角兽企业重金招聘Python工程师标准>>> Java中Vector和ArrayList的区别 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是Arr ...
- vector和deque的区别?
vector和deque的区别? vector概述 vector的数据结构 vector的构造与内存管理 deque deque概述 deque的构造与内存管理 vector和deque的区别 vec ...
- vector 和 list 的区别,应用
vector 和 list 的区别,应用 1)Vector 2.List 3.应用 1)Vector 连续存储的容器,动态数组,在堆上分配空间 底层实现:数组 两倍容量增长: vector 增加(插入 ...
- 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList
[重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...
- C++ vector和list的区别
C++ vector和list的区别 1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变. 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连 ...
- 【C++容器】数组和vector、array三者区别和联系
目录 一.数组 二.向量vector 三.数组与vector的对比 array和vector,数组三者区别和联系 共同点 不同点 作者:bandaoyu,本文不断更新,源文:https://blog. ...
- Java Vector与ArrayList的区别
俗话说最危险的地方最安全,写Java代码的时候Vector估计是最常用的集合类了,ArrayList用得也不少.不过关于这两个类有什么区别竟然从来就没去关注过,直到今天才偶然发现这两个类其实有重大区别 ...
- c语言实现容器,C语言三种容器:list vector和deque的区别
在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担.还有一个就是容器,你会发现要是自己写一个链表.队列,或者是数组的时候,既要花时间还要操心怎么 ...
- C++ vector和list的区别及使用场景
区别: 1.vector底层是连续结构:list底层是非连续结构 2.vector支持随机访问:list不支持随机访问 3.vector迭代器是原生指针:list迭代器是封装结点的一个类 4.vect ...
最新文章
- SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
- 单片机是否为嵌入式技术,单片机和嵌入式学哪个?
- MyBatis的入门知识
- IIS应用池保持激活工具开发
- 64位的Mac OS X也有Windows.Forms了
- 【数据结构与算法】【算法思想】【MySQL数据库索引】B+树
- python实现语义分割_如何用PyTorch进行语义分割?一文搞定
- [Python] Request module
- Oracle表字段的增加、删除、修改和重命名
- NFine.Framework框架去除cookie后门方法
- 粉红噪音测试软件,煲耳机方法二:粉红噪音
- Django中文文档
- 为什么网站总显示服务器不能创建对象,IE浏览器出现“Automation 服务器不能创建对象”解决教程...
- 国家码信道顺从表(含数据库和配置)
- 分布式光伏系列:分布式光伏电站 运行与维护方案一览(zz)
- k8s---adm构建
- mac系统怎么打开ftp服务器,mac系统怎么打开ftp服务器
- 操作系统学习笔记(5. 文件管理)
- 图像的基本操作--反转、放大等
- 支付宝当面付扫码支付支付后不回调_码云上不错的几个支付相关的项目
热门文章
- Windows 安装Docker 打包镜像
- 我们都进入了一个误区,其实面试官 “ 回去等通知 ” 不等于没戏....
- Java JDK 动态代理
- matlab合理分配席位_走进民航一线——首都机场机位分配员的24小时
- AppNinja 开发手记4: dmg kernelcache解密命令
- onshow 和 onload 的区别
- 移动端适配指南!聊聊安卓折叠屏给交互设计和开发带来的变化
- 2011年老古董MacbookPro(MD314 二代i7+SSD)升级macOS + windows11日记 - 双系统
- 使用PowerDesigner画ER图详细教程
- 英文SEO采集伪原创软件Kontent Machine注册使用实战教程!