STL中容器的介绍及分类

  C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现,称为容器,如 queues(队列)、lists(链表)、和 stacks(栈)等。

一、容器介绍

  STL容器是由一些运用最广的一些数据结构实现出来的。常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射表)等等。这些数据结构按结构可以分为序列式(sequence)和关联式(associative)两种。

  上图是各种容器的衍生层关系(这里所谓的衍生,并非派生关系,而是内含关系),例如heap内涵一个vector、priority-queue内含一个heap、stack和queue都含一个deque、set/map/multiset/multimap都含有一个RB-tree、hash_都内含一个hashtbale。

二、序列式容器

概念:
  所谓序列式容器,其中的元素都是可序的,但是未必都是有序的。
分类:
  顺序结构:vector、list、deque;
  容器适配器:stack、queue、priority-queue;
  之所以称为容器适配器,是因为例如stack、queue由只是将deque改头换面而已,所以它们是一种配接器(adapter);
  备注:C++语言本身提供一个序列式array(不属于STL范畴)。

三、关联式容器

概念:
  关联式容器,每笔数据(每个数据)都有一个键值(key)和一个实值(value)
特点:
  当元素被插入到关联式容器中时,容器内部数据结构(RB-tree或hash-table等)依据其键值大小,以某种特定规则将这个元素放置于适当位置;
  关联式容器没有头尾(只有最大元素和最小元素),所以不会有push_back()、push_front()、pop_back()、pop_front()、begin()、end()等操作。
分类:
  分为set(集合)、map(映射表)两大类,以及两大类的衍生体multiset(多键集合)、multimap(多键映射表)。
  SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表)以及以此hash table为底层机制而完成的hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)。
底层实现:
  关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜索效率。balanced binary tree有许多种类,包括AVL-tree、RB-tree、AA-tree,其中最被广泛应用于STL的是RB-tree(红黑树)。
  set、map、multiset、multimap底层均以RB-tree(红黑树)完成。RB-tree(红黑树)也是一个独立容器,但并不开放给外界使用。

STL中容器的介绍及分类相关推荐

  1. [C++ STL] 各容器简单介绍

    [C++ STL] 各容器简单介绍 目录 一.什么是STL? 二.容器(Containers) 2.1 vector 2.2 deque 2.3 list 2.4 set 2.5 map 2.6 容器 ...

  2. STL中容器vector迭代器失效的相关问题

    迭代器失效,有两个层面的意思: 无法通过迭代器++,–操作遍历整个stl容器.记作: 第一层失效. 无法通过迭代器存取迭代器所指向的内存. 记作: 第二层失效. vector是个连续内存存储的容器,如 ...

  3. [C++STL]map容器用法介绍

    代码如下: #include <iostream> #include <string> #include <map> using namespace std;voi ...

  4. [C++STL]set容器用法介绍

    代码如下: #include <iostream> #include <set> using namespace std;void printSet(set<int> ...

  5. [C++STL]list容器用法介绍

    代码如下: #include <iostream> #include <string> #include <list> using namespace std;vo ...

  6. [C++STL]deque容器用法介绍

    代码如下: #include <iostream> #include <string> #include <deque> using namespace std;v ...

  7. [C++STL]vector容器用法介绍

    代码如下: #include <iostream> #include <string> #include <vector> using namespace std; ...

  8. [C++STL]string容器用法介绍

    string构造函数 代码如下: #include <iostream> #include <string> using namespace std;void test01() ...

  9. [C++STL]queue容器用法介绍

  10. [C++STL]stack容器用法介绍

最新文章

  1. R语言原生hist函数绘制直方图实战
  2. 笔记-项目合同管理-要约、承诺和要约邀请
  3. Cucumber入门之_argument
  4. 从一个实际的例子出发,谈谈SAP Commerce Cloud电商云的UI自定义开发
  5. cvc降噪和主动降噪_市面上的降噪耳机,物理降噪和主动降噪,你会怎么选择?...
  6. 富文本编辑器中空格转化为a_熙态农业:富硒鸡蛋有什么营养价值?
  7. 【jQuery笔记Part3】01-jQuery-each遍历
  8. 诛仙2·末日与曙光》解禁公测
  9. 在Ubuntu上安装使用Systemtap
  10. 硬件与分析-音速小子
  11. 简记_高频变压器基础知识(一)
  12. 微信小程序的两种视频录制方式
  13. 微信小程序—连接MQTT
  14. Shopee平台不活跃商品清理规则更新
  15. 车牌号码识别程序分享
  16. 关于跨平台 UI 的思考
  17. 程序员也要学英语——印欧语音变规律总结
  18. 根据出生日期判断星座
  19. Unity导入模型和材质丢失问题处理(大批量操作)
  20. Python 豆瓣网的全自动登录(豆瓣验证码自动识别)

热门文章

  1. xml文件的根节点layout_width或者layout_height设置无效果的原因分析
  2. 递归实现回旋数组的小程序
  3. 能解决 80% 故障的排查思路
  4. 我和阿里的情缘和故事
  5. 一种视频录制时,类似监控视频中加入动态时间标记的装置
  6. python数据库操作——NoSQL数据库之连接MongoDB、Redis数据库
  7. 服务器上的数据库文件夹下,服务器怎么打开数据库文件夹下
  8. linux eof打印列表,Linux:结合cat和EOF输出到文本文件
  9. python-gui-pyqt5的使用方法-6--lambda传递参数的方法:
  10. 帆软分组合并字符串、提取字符串中的数字、判断多项字符串至少一项被包含