STL 常用容器的底层数据结构实现

1.vector 底层数据结构为数组 ,支持快速随机访问

2.list 底层数据结构为双向链表,支持快速增删

3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下:

[堆1] --> [堆2] -->[堆3] --> …

每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品.

4.stack 底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

5.queue 底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

(stack和queue其实是适配器,而不叫容器,因为是对容器的再封装)

6.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

7.set 底层数据结构为红黑树,有序,不重复

8.multiset 底层数据结构为红黑树,有序,可重复

9.map 底层数据结构为红黑树,有序,不重复

10.multimap 底层数据结构为红黑树,有序,可重复

11.hash_set 底层数据结构为hash表,无序,不重复

12.hash_multiset 底层数据结构为hash表,无序,可重复

13.hash_map 底层数据结构为hash表,无序,不重复

14.hash_multimap 底层数据结构为hash表,无序,可重复

STL 常用容器的底层数据结构相关推荐

  1. STL 常用容器的底层数据结构实现

    1.vector      底层数据结构为数组 ,支持快速随机访问 2.list            底层数据结构为双向链表,支持快速增删 3.deque       底层数据结构为一个中央控制器和 ...

  2. 16 STL - 常用容器

    本篇博客是根据黑马程序员视频整理,仅供学习使用. 如果这篇文章对你有帮助的话,请不要吝啬一键三连. 16 STL - 常用容器 16.1 string容器 16.1.1 string基本概念 本质: ...

  3. STL常用容器——deque容器的使用

    文章目录 STL常用容器--deque容器的使用 1.deque 容器简介 2.deque容器的构造函数 3.deque的赋值操作 4.deque大小操作 5.deque容器添加和删除元素 6.deq ...

  4. STL容器的底层数据结构

    本文部分内容转自此博客 目录 vector list deque stack queue heap priority_queue set map multiset/multimap 哈希表hashta ...

  5. 【C++】STL常用容器总结之十二:string类

    13.string类 声明 string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍. 之所以抛弃char*的字符串而选用C++标准程序库中的s ...

  6. 【模板】数据结构之STL常用容器

    标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在 ...

  7. C++中STL常用容器的优点和缺点

    我们常用到的STL容器有vector.list.deque.map.multimap.set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我 ...

  8. STL常用容器大致对比

    1.vector vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问.由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢.vector有多个构造函数,默认的构造函数是构 ...

  9. 【C++】STL常用容器总结之五:双端队列deque

    6.双端队列deque 所谓的deque是"double ended queue"的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中 ...

最新文章

  1. ros自带package在哪里_【ROS】创建ROS功能包(ROS package)
  2. 清华大学郑莉c++答疑
  3. 【转载】DRuid 大数据分析之查询
  4. javascript自定义startWith()和endWith()方法
  5. 基于哈夫曼编码完成的文件压缩及解压
  6. PostgreSQL on Linux 最佳部署指南
  7. axios创建实例对象发送ajax请求_解决一个网页请求多个服务器场景---axios工作笔记009
  8. 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)...
  9. Android开发笔记(一百六十一)NFC近场通信
  10. 2016 Multi-University Training Contest 1 T4
  11. JavaScript jQuery bootstrap css ajax
  12. 给闪讯加装路由器的一个简单方法
  13. 计算机鼠标滚轮不流畅,鼠标滚轮不灵敏怎么办_鼠标中间的滚轮不灵敏了如何解决...
  14. word把选择答案弄到题目里_将Word解答中的答案项批量填入题干
  15. matlab中龙贝格公式,龙贝格求积公式matlab
  16. GPON(计算机网络相关)
  17. [生存志] 第16节 历代大事件概览 三国
  18. 192.168.1.0/24
  19. airpods二代降噪吗_2020年苹果无线蓝牙耳机AirPods/Airpods Pro选购指南和使用技巧 | 10月更新...
  20. 时间序列模型(ARIMA和ARMA)完整步骤详述

热门文章

  1. 【课堂笔记】模型制作流程
  2. 系统学习编程笔记(十二)
  3. deepin系统ll命令不可用解决方法
  4. HMI-47-【多媒体】Title界面实现 2
  5. HTTP状态码(2xx,3xx,4xx,5xx)
  6. 前端处理后端返回的excel文件流并下载
  7. 程序员的选择,技术or管理
  8. 邮件营销群发6大技巧!怎么群发邮件效果好?
  9. Graylog单机版安装,Graylog安装脚本一键实现在线离线安装
  10. 利用kali hydra 暴力破解Windows7(hydra的基本用法)会继续更新