前言

常见的顺序容器主要有三种 - vector,deque,list。它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题。

分析

由于这三种容器实现的数据结构原型不同(vector实现原型是顺序表,deque是双端队列,list是链表),因此这三种容器对插入删除以及访问操作的开销是不同的。为了编制出高效的程序,我们应当通过分析容器操作的开销来选择容器。

访问操作对容器选择的影响

1. vector容器的随机访问效率最高;

2. deque容器的随机访问效率也高;

3. list容器的随机访问效率低;

插入删除操作对容器选择的影响

1. vector容器只是在尾部进行插入删除效率高;

2. deque容器能在两端都实现高效的插入删除;

3. list容器能在任何位置都实现高效的插入删除;

说明

1. 如果需要使用随机访问,也需要在非双端的位置实现插入删除,那么应该具体分析哪种操作所占比例更大,以决定容器的选择。

2. 在程序的不同开发阶段(不同阶段各种操作所占比例也许不同)可以考虑使用不同的容器保存数据,转阶段时切换容器即可。

第十篇:顺序容器vector,deque,list的选用规则的更多相关文章

  1. C++ 顺序容器 vector list deque 之比较

    在C++标准库中定义了三种顺序容器类型:vector,list和deque.所谓顺序容器就是根据位置来存储和访问元素,元素的排列次序与元素的值无关,而是由元素添加到容器的次序决定的. vector的底 ...

  2. 顺序容器vector,deque,list的选用规则

    前言 常见的顺序容器主要有三种 - vector,deque,list.它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题. 分析 由于这三种容器实现的数据结构原型不同(v ...

  3. C++ 顺序容器(vector,list、deque,stack,queue)

    顺序容器的种类有:vector,list.deque 顺序容器适配器: stack     //先进后出   栈 queue   //先进先出   队列 priority_queue   //也优先管 ...

  4. 【c++进阶:c++ 顺序容器vector,string,deque,list,forward_list,array常用性质】

    常用5种顺序容器性质: https://blog.csdn.net/oil_you/article/details/82821833 关于deque https://www.cnblogs.com/L ...

  5. C++顺序容器vector、deque、list

    1.容器元素类型 C++中大多数数据类型能够作为容器的元素类型.容器元素类型必须满足一下两个条件:支持赋值和复制操作. 所以没有元素是引用类型的容器,同一时候IO对象和auto_ptr也不能作为容器的 ...

  6. c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑

    转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时 ...

  7. 2.1顺序容器-vector

    vector 1) *   :使用vector必须包含vector头文件.可变长的动态数组,支持随机访问,所有STL算法都可以对vector进行操作. ** :随机根据下标访问某个元素的时间是一个常数 ...

  8. [第十篇]——Docker 容器连接之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker 容器连接 前面我们实现了通过网络端口来访问运行在 docker 容器内的服务. 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过  -P 或  -p 参数来指定端口映射. ...

  9. 顺序容器:vector,deque,list

    1.顺序容器:vector,deque,list 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器 ...

随机推荐

  1. Redis源代码解析:13Redis中的事件驱动机制

    Redis中.处理网络IO时,採用的是事件驱动机制.但它没有使用libevent或者libev这种库,而是自己实现了一个很easy明了的事件驱动库ae_event,主要代码只400行左右. 没有选择l ...

  2. LoadRunner访问Mysql数据库(转)

    这是很久以前编写的一个测试案例,那时是为了检查大量往Mysql数据库里插入数据,看一下数据库的性能如何?服务器是否会很快就被写满了. 前期的准备工作:Mysql 数据库搭建,LoadRunner,li ...

  3. 【TP3.2】Call to a member function display() on a non-object问题的解决

    Call to a member function display() on a non-object问题的解决

  4. 解疑 Numpy 中的 transpose(转置)和swapaxes(两个轴转置变换)

    1.一维和二维数据 .T等同于.transopse 2.三维及更多维数据 对于 z 轴 与 x 轴的变换 In [40]: arr = np.arange(16).reshape((2, 2, 4)) ...

  5. SQL数据表插入随机数(转)

    declare @T TABLE (id int identity(1,1),[Name] nvarchar(20), Randnum int) insert @T ([Name]) select ' ...

  6. 使用Openssl创建证书

    概述 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏: ...

  7. Team Foundation Server安装指南(转载)

    1.说明 Team Foundation Server(以下简称VSTF)的安装并不是一件轻松的事情,在安装的过程中相信很多人都或多或少碰到一些问题而安装不成功,虽然手头有微软提供的所谓安装手册,也曾 ...

  8. [elk]logstash&filebeat常用语句

    filebeat安装dashboard 参考: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-getting-star ...

  9. Yii2中对数据库的查询方法如下

    User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->w ...

  10. Python 集合常用方法总结

    数据类型:int/str/bool/list/dict/tuple/float/set   (set类型天生去重) 一.集合的定义 s = set()  #定义空集合 s = {'a','b','c' ...