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之七: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. wince系统改安卓系统_什么是实时操作系统(RTOS)
  2. 2014搜狗前端面经【B事业部】
  3. 第一周作业--软件过程与项目管理
  4. 杭州线下|2019产品经理年终轰趴
  5. simulink自定义信号源方法matlab数据导入sim
  6. linux颜色吸取工具,8 个优秀的 Linux 图形图像及色彩工具
  7. android 申请usb权限,USB 权限申请流程
  8. [css] 为什么float会导致父元素塌陷
  9. pytorch LSTM_regression
  10. 简单高效有用的正则表达
  11. wine android6,安卓能跑Windows程序,Wine 2.10开发版发布
  12. 【语音隐写】基于matlab DWT音频数字水印嵌入提取【含Matlab源码 350期】
  13. ArcMap教程:合并ShapeFile中多个要素
  14. 手机版kali Linux教程(质量高)
  15. 帝国cms系统使用初级教程一(较全面)
  16. python中axis=0和axis=1的理解
  17. 计算机屏幕节省电,电脑显示器如何省电
  18. 全国大学生数学建模竞赛(赛题选择)
  19. 无服务器+域名也能搭建个人博客?真的,而且很快
  20. 使用云服务器ECS搭建DoH服务的开发实践

热门文章

  1. 这篇 CPU Cache,估计要消化一下
  2. 好文推荐 | etcd 问题、调优、监控
  3. RabbitMQ基础概念详解
  4. Go channel 的妙用
  5. LiveVideoStack线上分享第五季(一):企业视频会议场景下的流量分发和弱网优化...
  6. 熊谢刚:AI和5G让容联·云通讯弯道超车
  7. WebRTC通话原理
  8. 腾讯云数据库闪耀曼哈顿,CynosDB回馈开源社区
  9. centos升级内核
  10. 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)