STL共有六大组件
1、容器 2、算法 3、迭代器 4、仿函数 6、适配器

STL容器的实现原理

STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构.

序列式容器:
vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中。
list-双链表。
deque-分配中央控制器map(并非map容器),map记录着一系列的固定长度的数组的地址.记住这个map仅仅保存的是数组的地址,真正的数据在数组中存放着.deque先从map中央的位置(因为双向队列,前后都可以插入元素)找到一个数组地址,向该数组中放入数据,数组不够时继续在map中找空闲的数组来存数据。当map也不够时重新分配内存当作新的map,把原来map中的内容copy的新map中。所以使用deque的复杂度要大于vector,尽量使用vector。
stack-基于deque。
queue-基于deque。
heap-完全二叉树,使用最大堆排序,以数组(vector)的形式存放。
priority_queue-基于heap。
slist-单向链表。

关联式容器:
set,map,multiset,multimap-基于红黑树(RB-tree),一种加上了额外平衡条件的二叉搜索树。
hash table-散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值(碰撞问题,可以用线性探测,二次探测来解决),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。
hash_map,hash_set,hash_multiset,hash_multimap-基于hash table。

综上所述大家应该知道了什么情况下该使用哪一个STL容器更合适,可以在适当时候避免使用一些影响效率的STL容器.

最新文章

  1. DataView详解
  2. T-SQL 循环表的一种方式
  3. 快速部署tomcat项目的Shell脚本
  4. Java开发中经典的小实例-(输入三个数字判断三角形类型)
  5. U盘快捷方式中毒处理办法
  6. css3开门
  7. C++:异常的处理
  8. java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例
  9. 【Ecstore2.0】导出问题解决(未导出或导出文件为0字节)
  10. 解决pycharm无法导入本地包的问题(Unresolved reference 'tutorial')
  11. j2se 总结
  12. CodeForces 1151E Number of Components
  13. SVM原理 (转载)
  14. Tomcat web.xml配置参数详解
  15. 大数据学习笔记1-大数据处理架构Hadoop
  16. 微信小程序选择视频,视频上传,视频播放
  17. Java修改服务器(tomcat)响应头 Server:Apache-Coyote/1.1
  18. ajaxfileupload.js ajax上传文件(含application/json)
  19. JavaScript6里出现了哪些新语法、新特征?
  20. Lucene第二讲——索引与搜索

热门文章

  1. Flask中异常捕获
  2. 关于SSM项目注解事务不回滚的问题
  3. cnpm 下载
  4. web3.js_1.x.x--API(二)/合约部署与事件调用
  5. 构造HTTP请求Header实现“伪造来源IP”
  6. DJANGO2.0 关联表的必填 ON_DELETE
  7. 3D Food Printing【3D食物打印】
  8. POJ1236 tarjan
  9. vue---day03
  10. spring boot踩坑记