C++ STL容器有哪些(新手必看)
容器就是存放数据的类模板。STL 中的容器分为两类,即序列式容器和关联式容器。
序列式容器不会自动对存储的元素按值进行排序,也就是说其元素大小是无序的。将元素插入序列式容器中时,指定什么位置,元素就会位于什么位置。
常见的序列式容器如下:
除此之外,关联式容器存储元素时,会自动根据元素的键的大小升序排序。
常见的关联式容器采用树形结构,包括如下 4 类:
C++ 11 标准库又加入了 4 种无序关联式容器,即哈希容器。其中的元素是未排序的,元素位置由哈希函数确定。哈希容器包括如下 4 类:
常见的容器适配器如下:
STL序列式容器
序列式容器采用线性结构存储数据,其中可存储基本数据类型(如 int、double、float、string 等)或结构体类型的元素。序列式容器不会自动对存储的元素按值进行排序,也就是说其元素大小是无序的。将元素插入序列式容器中时,指定什么位置,元素就会位于什么位置。
常见的序列式容器如下:
- array:数组;
- vector:向量,又称为动态连续数组;
- deque:双端队列;
- list:双向链表;
- orward_list:正向链表。该容器是C++ 11中新增加的容器。
STL关联式容器
关联式容器在存储元素值时,会为元素额外配备一个键,根据键(key)可快速锁定目标元素。也就是说,关联式容器存储的是表示某种对应关系的键值对(<key,value>),这是和序列式容器最大的不同。除此之外,关联式容器存储元素时,会自动根据元素的键的大小升序排序。
常见的关联式容器采用树形结构,包括如下 4 类:
- map:映射,元素的键唯一;
- multimap:多重映射,元素的键不唯一;
- set:集合,元素的键唯一;
- multiset:多重集合,元素的键不唯一。
C++ 11 标准库又加入了 4 种无序关联式容器,即哈希容器。其中的元素是未排序的,元素位置由哈希函数确定。哈希容器包括如下 4 类:
- unordered_map:哈希映射;
- unordered_multimap:哈希多重映射;
- unordered_set:哈希集合;
- unordered_multiset:哈希多重集合。
STL容器适配器
容器适配器主要针对序列式容器,它通过定义新的接口,将不适用的容器变为适用的容器。这有点类似于生活中的电源适配器,将不兼容(如不同电压标准)的电源转换为适合的电源。常见的容器适配器如下:
- stack:栈;
- queue:队列;
- priority_queue:优先级队列。