标准库提供了一些既通用又好用的容器类型,程序员可以根据应用的实际需求选择最适合的容器:
| 标准库容器概述 | ||
|---|---|---|
| vector |
可变大小向量 | 31.4节 |
| list |
双向链表 | 31.4.2节 |
| forward_list |
单向链表 | 31.4.2节 |
| deque |
双端队列 | 31.2节 |
| set |
集合 | 31.4.3节 |
| multiset |
允许重复的集合 | 31.4.3节 |
| map |
关联数组 | 31.4.3节 |
| multimap |
允许重复关键字的map | 31.4.3节 |
| unordered_map |
采用哈希搜索的map | 31.4.3.2节 |
| unordered_multimap |
采用哈希搜索的multimap | 31.4.3.2节 |
| unordered_set |
采用哈希搜索的set | 31.4.3.2节 |
| unordered_multiset |
采用哈希搜索的multiset | 31.4.3.2节 |
无序容器针对关键字(通常是一个字符串)搜索进行了优化,这是通过使用哈希表来实现的。
31.4节将详细介绍与容器有关的知识。前面提到的容器分别定义在< vector>、和
begin()和end()分别返回指向首元素和尾后位置的迭代器。push back()可用来(高效地)向 vector、list及其他容器末尾添加元素。size()返回元素数目
形式和语义上的一致性使得程序员可以设计出与标准库容器在使用方式上非常相似的新的容器类型,包含范围检查功能的向量 Vector(见23.2节和24.31节)就是一个很好的例子。容器接口的一致性还便于我们设计与容器类型无关的算法。但是,凡事皆有两面性,某种技术的优点和缺点常常并存。例如,下标操作和遍历 vector的操作很高效也很简单。但另一方面,当我们在 vector中插入或删除元素时,不得不每次都移动元素,效率不佳;list则恰好具有相反的特性。请注意,当序列较短且元素尺寸较小时, vector通常比list高效
(insert()和erase()操作也是如此)。推荐将标准库 vector作为存储元素序列的默认类型;只有当你的理由足够充分时,再考虑选择其他容器。
