C++中 list与vector的区别

引用http://www.cnblogs.com/shijingjing07/p/5587719.html

C++ 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。

posted on 2017-03-17 21:50 wj0816 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wj0816/p/6568630.html

C++中 list与vector的区别相关推荐

  1. Java中ArrayList和Vector的区别

    首先想说的是: Vector是在Collections API之前就已经产生了的, 而ArrayList是在JDK1.2的时候才作为Collection framework的一部分引入的. 它们都是在 ...

  2. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  3. c++中list、vector、map 、set区别

    List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector对于随机 ...

  4. ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别

    一.ArrayList 和 LinkedList区别: (1)两者都是线程不安全,都实现了Collection接口. (2)数据结构:ArrayList是基于动态数组的数据结构,LinkedList是 ...

  5. matlab括号区别,matlab中各种括号(),[],与{}的区别与认识

    matlab中各种括号(),[],与{}的区别与认识 发布时间:2018-06-04 10:37, 浏览次数:469 , 标签: matlab 原文 在matlab中,常常会遇到(),[],和{},这 ...

  6. C++中重载与重写函数区别及虚函数(转载)

    C++中重载与重写函数区别及虚函数 C++中的虚函数(virtual function) 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的 ...

  7. java iter是否存在_Java中ListIterator和Iterator的区别以及ListIterator的应用

    Java中ListIterator和Iterator详解与辨析 在使用java集合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.Arra ...

  8. ArrayList和Vector的区别

    这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素, ...

  9. Java-ArrayList和Vector的区别

    这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素, ...

最新文章

  1. 怎么看mysql有没有安装成功_MySQL 安装看这一篇就够了
  2. 电子科技大学计算机博士不好毕业吗,超六成博士生无法正常毕业:教育部数据告诉你哪个专业和学校最难读...
  3. MapXtreme 根据名称搜索图元
  4. 黑客之门的魅力:感染与加载 [转]
  5. android httpclient post 参数,Android HttpClient GET或者POST请求基本使用方法
  6. 七夕送女友什么礼物有意义、送女朋友实用的七夕礼物清单
  7. 云专网和云专线的区别_云专线网络接入解决方案
  8. windows连接虚拟专用网络的方法教程
  9. 数据处理任务量级巨大?构建预置容器镜像的Amazon EKS解决方案了解一下!
  10. cisco 华三 对接_H3C 交换机与Cisco交换机采用链路聚合对接的配置案例
  11. 计算机图形学是研究真实,计算机图形学论文真实感制图技术在图形学中的应用...
  12. 新加坡金融科技节之声|蚂蚁金服CTO程立:面向全球开放能力
  13. Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系
  14. 使用bootstrap来模拟构建Cropper的官方网站
  15. 社区生态 | openEuler、龙蜥Anolis、统信UOS三大主流操作系统下编译GreatSQL二进制包
  16. 2020中国国际智慧能源暨能源数据中心与网络信息安全装备展览会
  17. 浅谈设计模式及python实现
  18. Jsp网上超市设计与实现(源代码+论文)
  19. 扫描文件无法连计算机,文件无法从复印机扫描到电脑?可能是以下操作您没有注意到...
  20. 主题:美剧职场口语:关于“妓女”的词儿种种

热门文章

  1. quartz Cron-Expression的表达式
  2. MacOSX64位机器上gcc编译32位x264静态库
  3. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...
  4. ubuntu ls命令
  5. java基本数据类型所占长度_java基本数据类型长度详解
  6. Ubuntu瘦身与扩容运动
  7. 机器学习算法应用30篇(十)-通俗理解支持向量机SVM及代码实践
  8. 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
  9. linux查看apache配置文件路径,linux 命令行下查看apache配置文件httpd.conf位置
  10. 一种移动端自适应屏幕的方法