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

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

注意:

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

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

最新文章

  1. my links
  2. img图片自适应div盒子,前提是不要把盒子的高给写死了,就是不要写高,如下
  3. 浅析JS中的模块规范(CommonJS,AMD,CMD)////////////////////////zzzzzz
  4. cocostudio 1.6
  5. RDVTabBarController的基本使用 以及tabbar的防止双点击方法
  6. Ubuntu+Redis主从配置
  7. iOS关于打包出错
  8. C与C++
  9. (转)Free函数的参数一定要是malloc返回的那个指针
  10. 动态规划——最长公共子序列(LCS)
  11. 编程思想之——"人是活的,程序是死的"
  12. sqlmap详细使用 [精简]
  13. python之总体理解
  14. Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理
  15. PhoenixFD插件流体模拟——UI布局【Interaction】详解
  16. mvc webapi路由重写
  17. python特殊成员函数
  18. Ubuntu系统下添加程序启动器
  19. windows上完美的X-server服务器软件:MobaXterm
  20. Linux技术进阶示意图

热门文章

  1. 基于nodejs的开源博客
  2. 工作流JBPM_day01:6-执行流程实例
  3. VMware 12安装虚拟机Mac OS X 10.10(VMware12安装/共享文件夹)
  4. 微信jssdk批量添加卡券接口(踩坑经验)
  5. java日志之log4j简单使用
  6. CMS3.0——初次邂逅express
  7. 阿里大于短信返回XML
  8. Delphi Live Bindings 初探
  9. java基础---->java中Properties的使用
  10. java基础---->Base64算法的使用