如何选择最佳的容器类别?

  • 缺省情况下应该使用vector。vector的内部结构简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快。
  • 如果经常要在序列的头部和尾部安插和移除元素,应采用deque。此外vector通常采用一个内存区块来存放元素,而deque采用多个区块,所以后者可内含更多的元素。
  • 如果需要经常在容器的中段执行元素的安插、移除和移动,建议使用list。
  • 如果经常需要根据某个准则来搜寻元素,应该使用set或multiset。
  • 处理key/value pair,使用map。

注意:

(1) 关联式容器拥有自动排序能力,并不意味着它们在排序方面的执行效率高。事实上由于关联式容器每安插一个新元素,都要进行一次排序,所以速度反而不及序列式容器经常采用的方法:先安插所有的元素,然后调用排序算法进行一次完全排序。

(2) 迭代器失效的问题
vector 当内存重新分配时,所有迭代器失效。所以在安插或移除元素可能导致所有或部分迭代器失效。
deque 安插或移除操作,都将导致迭代器失效。
list 增加或删除元素不会导致其他迭代器失效。
map set 安插元素不会导致迭代器失效,删除元素,不会导致别的迭代器失效。

STL学习笔记--各种容器的运用时机的更多相关文章

  1. STL学习笔记(一) 容器

    0.前言随机访问迭代器: vector.string.dequeSTL的一个革命性的方面就是它的计算复杂性保证 条款01:慎重选择容器类型 c++提供的容器:标准STL序列容器:vector.stri ...

  2. STL学习笔记— —无序容器(Unordered Container)

    简单介绍 在头文件<unordered_set>和<unordered_map> 中定义 namespace std { template <typename T, ty ...

  3. STL学习笔记--特殊容器

    容器配接器 (1) stack 栈 后进先出(LIFO), 头文件#include<stack> template<class _Ty, class _Container = deq ...

  4. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  7. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  8. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  9. Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

随机推荐

  1. HTML5 直播技术

    https://segmentfault.com/a/1190000010440054

  2. [Scikit-learn] *Dynamic Bayesian Network - Partical Filter

    涉及的一些知识: 机器人的自我定位 Sequential Importance Sampling Ref: http://scipy-cookbook.readthedocs.io/items/Par ...

  3. 浅谈Socket长连+多线程

    缘由 不知各位同仁有没有发现,用简单,无外乎就是都是一个流程 1)监听链接 2)校验链接是否是正常链接 3)保存链接至全局静态字典 4)开启新线程监听监听到的线程报文 5)执行对应命令或者发送对应命令 ...

  4. 使用ASIHTTPRequest xcode编译提示找不到"libxml/HTMLparser.h"

    使用ASIHTTPRequest xcode编译提示找不到"libxml/HTMLparser.h",解决方法如下: 1>.在xcode中左边选中项目的root节点,在中间编 ...

  5. Android 使用GridView以表格的形式显示多张图片

    GridView用于在界面上按行.列分布的方式来显示多个组件(而ListView只是以按行的方式) 课程目标 学会使用GridView制作二维布局界面(行.列分布) 数据源(集合) --> 适配 ...

  6. Oracle分页查询sql语句

    1. select * from ( select  t.*, rownum RN from TABLE_NAME  t ) where RN > 0 and RN <= 15 2. se ...

  7. devstack screen 详解

    n my previous blog i discussed how to install devstack based openstack. Now if I need to restart ind ...

  8. Android UsageStats:应用根据启动次数、启动时间、应用名称排序

    Android 7.1.1 developers/samples/android/system/AppUsageStatistics/Application/src/main/java/com/exa ...

  9. JavaBean入门及简单的例子

    不会编写JavaBean就不是一个Java开发人员. 那么,何谓JavaBean呢? JavaBean是符合某种规范的Java组件,也就是Java类. 它必须满足如下规范: 1)必须有一个零参数的默认 ...

  10. poj2096 Collecting Bugs[期望dp]

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 5394   Accepted: 2670 ...