STL学习笔记--各种容器的运用时机
2015-08-09 23:14
302 查看
如何选择最佳的容器类别?
缺省情况下应该使用vector。vector的内部结构简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快。如果经常要在序列的头部和尾部安插和移除元素,应采用deque。此外vector通常采用一个内存区块来存放元素,而deque采用多个区块,所以后者可内含更多的元素。
如果需要经常在容器的中段执行元素的安插、移除和移动,建议使用list。
如果经常需要根据某个准则来搜寻元素,应该使用set或multiset。
处理key/value pair,使用map。
注意:
(1) 关联式容器拥有自动排序能力,并不意味着它们在排序方面的执行效率高。事实上由于关联式容器每安插一个新元素,都要进行一次排序,所以速度反而不及序列式容器经常采用的方法:先安插所有的元素,然后调用排序算法进行一次完全排序。
(2) 迭代器失效的问题
vector 当内存重新分配时,所有迭代器失效。所以在安插或移除元素可能导致所有或部分迭代器失效。
deque 安插或移除操作,都将导致迭代器失效。
list 增加或删除元素不会导致其他迭代器失效。
map set 安插元素不会导致迭代器失效,删除元素,不会导致别的迭代器失效。
相关文章推荐
- 如何在XHTML文档中加入CSS
- 新手代码集之while循环
- 关于BACnet协议中的InvokeID的一些知识
- AngularJS 学习
- springboot配置内存数据库测试环境
- Leetcode56 Merge Intervals
- 分享一下收到的微软CRM云分享计划 邮件
- 分享一下收到的微软CRM云分享计划 邮件
- 未能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
- 快速幂取余
- vitamio视频播放器
- Google开源库-Volley的使用
- _DataStructure_C_Impl:树与二叉树
- Ubuntu镜像源的替换
- UIView中的一些常用的方法
- 黑马程序员——JAVA内部类概述与内部被继承与继承其他类的问题
- QT变异版本下载(SJLJ长跳转,DWARF不传递错误(32位专用),SEH(64位专用)),以及QT的实验室项目
- _DataStructure_C_Impl:序列构造二叉树
- 1、嵌入式开发之centos6.6配置samba服务器
- 使用Github进行代码提交和下载