C++标准程序库提供了各具特长的不同容器。现在的问题是:该如何选择最佳的容器类别?下表给出了概述。

但是其中有些描述可能不一定实际。例如:如果你需呀处理的元素数量很少,可以虎落复杂度,因为线性算法通常对元素本身的处理过程比较快,这种情况下,“显性复杂度搭配快速的元素处理”要比“对数复杂度搭配慢的元素处理”来得划算。

作为对上表的补充,使用时:

1.缺省情况下应该使用vector。vector的内部结构最简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快。

2.如果经常要在序列头部和尾部安插和移除元素,应该采用deque。如果你希望元素被移除时,容器能够自动缩减内存,那么你也应该采用deque。此外,由于vector通常才有用一个内存区块来存放元素,而deque采用多个区块,所以后者可内含更多元素。

3.如果需要经常在容器的中段执行元素的安插、移除和移动,可考虑使用list。list提供特殊的成员函数,可以在常数时间内将元素从A容器转移到B容器。但由于list不支持随机存取,所以如果只要知道list的头部却要造访list中的元素,性能会大打折扣。

和所有“以节点为基础”的容器相似,只要元素还是容器的已不复,list就不会令指向那些元素的迭代器失效。vector则不然,一旦超过其容量,它的所有iterators,pointers.references都会失效;执行安插或移除操作时,也会令一部分iterators、pointers、references失效。至于deque,当它的大小改变,所有iterators,pointers,references都会失效。

4.如果你要的容器是这种性质:每次操作若不成功,便无效用,那么你应该选用list,或是采用关联式容器。

5.如果你经常需要根据某个准则来搜寻元素,那么应当使用“以该排序准则对元素进行排序”的set或multiset。记住,理论上,面对1000个元素的排序,对数复杂度比线性复杂度好10倍。就搜寻速度而言,hash table通常比二叉树还要快5-10倍。但是hash table的元素并未排序,所以如果元素必须排序,它就用不上了。

6.如果想处理key/value pair,请采用map或multimap。

7.如果需要关联式数组,应采用map。

8.如果需要字典结构,应采用multimap。

  • 上一篇STL之六:map/multimap用法详解
  • 下一篇百度面试题:求一个已排序的数组中绝对值最小的元素

STL之七:STL各种容器的使用时机详解相关推荐

  1. STL之七:STL各种容器的使用时机详解(精讲大全)

    C++标准程序库提供了各具特长的不同容器.现在的问题是:该如何选择最佳的容器类别?下表给出了概述. 但是其中有些描述可能不一定实际.例如:如果你需呀处理的元素数量很少,可以虎落复杂度,因为线性算法通常 ...

  2. C++ STL容器 —— map/multimap 用法详解

    C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...

  3. C++ STL list添加(插入)元素方法详解

    C++ STL list添加(插入)元素方法详解 主要内容 主要内容 参考链接

  4. Docker容器之镜像仓库详解

    Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解 1. 什么是Docker Image? 2. 什么是Docker Registry? 3. 镜像相关的操作 本文将集中对镜像. ...

  5. docker多个容器一起打包_详解Docker 容器基础系统镜像打包

    因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具.根据这个思路,我们就可以构建一个自己的容器基础系统镜像. 构建标准的 Li ...

  6. docker build命令详解_Docker镜像与容器常用命令图文详解

    一.系统命令 #查看docker版本 docker version #查看docker的系统信息,包含镜像容器的数量 docker info #查看docker的所有命令 docker --help ...

  7. 深入浅出之必须全面掌握的独立环境容器部署技术docker详解

    目录 一.docker学习大纲 二.聊聊docker为什么会出现 三.聊聊docker的历史 四.docker能做什么 五.docker中的名词概念 六.安装docker 七.配置阿里云镜像加速 八. ...

  8. 【c++】22. STL容器的底层实现详解

    文章目录 顺序容器 vector(向量容器) deque(双端队列) list 关联容器 set(集合) multiset map(key,value) multimap 顺序容器 vector(向量 ...

  9. 7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)

    一:题目 计算给定的n个数有多少种排列方式,即求全排列(可能出现重复的元素) 输入格式: 第一行输入数字的数量n(n>2),第二行给出每一个数字. 输出格式: 一个数字,不同排列方式的数量. 输 ...

最新文章

  1. Swift3.0带来的变化汇总
  2. BCH独立日最好的礼物——Token发行已实现
  3. 一个.net的系统的AOP设计思路二——页面控件校验映射
  4. 计算机硕士工资情况收集
  5. oracle技术之查询初始化参数的方法(六)
  6. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
  7. Red Hat 6.0 Installation Steps
  8. UI素材实用模板|2.5D等距风格插画专辑
  9. win10计算机管理如何分区,windows10如何对电脑硬盘进行分区
  10. python中的运算符重载_Python中的操作符重载
  11. 地铁票务管理系统_地铁票务管理工作总结
  12. KVM(二)CPU 和内存虚拟化
  13. 编译原理完整学习笔记(七):优化代码
  14. STM32-STVP烧录
  15. Java类型转换简单运用
  16. 抄底利器!如何用Python量化 识别股票双底形态走势!
  17. TIA博途中触摸屏仿真时画面字体变大,超出范围的处理方法
  18. 60个英文阅读网站推荐
  19. 如何用因果推断和实验驱动用户增长? | 7月28日TF67
  20. EasyExcel CellWriteHandler注入CellStyle不生效问题

热门文章

  1. 【EventBus】EventBus 源码解析 ( 取消订阅 )
  2. 【计算理论】计算理论总结 ( 泵引理 Pumping 证明 ) ★★
  3. 通过sort()方法实现升序和降序排列
  4. zabbix3.2.1安装graphtrees插件
  5. 【KEIL·单片机·扫盲贴】关于ARM单片机程序内存使用情况的细致讨论。
  6. Errors are values
  7. DarkTrack 4 Alien Version Released RAT 下载地址视频教程
  8. Javascript面向对象编程(一):封装
  9. Hadoop 资源列表
  10. gcc 常用命令(逐渐完善)