-### 分类
+## 分类
![](images/container1.png)
-#### 序列式容器
+### 序列式容器
- **数组** ( `array` ) **C++11** ,定长的顺序表,C 风格数组的简单包装。
- **单向列表** ( `forward_list` ) 只能沿一个方向遍历的链表。
-#### 关联式容器
+### 关联式容器
- **集合** ( `set` ) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序。
- **多重映射** ( `multimap` ) 允许键对有相等的次序的映射。
-#### 无序(关联式)容器
+### 无序(关联式)容器
- **无序(多重)集合** ( `unordered_set` / `unordered_multiset` ) 与 `set` / `multiset` 的区别在与元素无序,只关心”元素是否存在“,使用哈希实现。
- **无序(多重)映射** ( `unordered_map` / `unordered_multimap` ) 与 `map` / `multimap` 的区别在与键 (key) 无序,只关心 "键与值的对应关系",使用哈希实现。
-#### 容器适配器
+### 容器适配器
容器适配器其实并不是容器。它们不具有容器的某些特点(如:有迭代器、有 `max_size()` 函数……)。
- **优先队列** ( `priority_queue` ) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列。
-### 共同点
+## 共同点
-#### 容器声明
+### 容器声明
都是 `containerName<typeName,...> name` 的形式,但模板参数( `<>` 内的参数)的个数、形式会根据具体容器而变。
本质原因:STL 就是“标准模板库”,所以容器都是模板类。
-#### 迭代器
+### 迭代器
STL 容器中的元素都可以用迭代器指向。
迭代器分为输入/输出/向前/双向/随机访问迭代器、正向/反向迭代器。
-#### 共有函数
+### 共有函数
`begin()/rbegin()` :返回指向开头/末尾元素的正向/反向迭代器。