在 C++ 中,容器是用来存储和管理一组对象的类模板。标准模板库(STL)提供了多种容器,每种容器都有其特定的用途和特性。容器主要可以分为以下几类:
1. 序列容器(Sequence Containers)
这些容器维护了元素的线性顺序。常见的序列容器包括:
std::vector
: 动态数组,可以高效地在末尾添加和删除元素,随机访问元素的时间复杂度为常数时间O(1)
。std::deque
: 双端队列,可以在前后两端高效地添加和删除元素,但随机访问的时间复杂度稍高于std::vector
。std::list
: 双向链表,支持在任意位置进行高效插入和删除操作,但随机访问的时间复杂度为线性时间O(n)
。std::forward_list
: 单向链表,支持高效的插入和删除操作,但只支持单向遍历。
2. 关联容器(Associative Containers)
这些容器基于某种排序规则(通常是二叉搜索树),提供高效的元素查找和插入。常见的关联容器包括:
std::set
: 存储唯一元素,自动排序。std::multiset
: 存储多个相同元素,自动排序。std::map
: 存储键值对,键唯一,自动排序。std::multimap
: 存储多个相同键的键值对,自动排序。
3. 无序关联容器(Unordered Associative Containers)
这些容器基于哈希表实现,提供平均常数时间复杂度 O(1)
的元素查找、插入和删除操作。常见的无序关联容器包括:
std::unordered_set
: 存储唯一元素,不保证元素顺序。std::unordered_multiset
: 存储多个相同元素,不保证元素顺序。std::unordered_map
: 存储键值对,键唯一,不保证元素顺序。std::unordered_multimap
: 存储多个相同键的键值对,不保证元素顺序。
4. 容器适配器(Container Adapters)
容器适配器提供了对底层容器的特定操作接口。常见的容器适配器包括:
std::stack
: 基于另一个容器(如std::deque
或std::list
)实现的栈(后进先出,LIFO)数据结构。std::queue
: 基于另一个容器实现的队列(先进先出,FIFO)数据结构。std::priority_queue
: 基于一个容器实现的优先队列,提供对元素优先级的管理。
结构关系图:
容器(Container) | 顺序容器(Sequence) | 关联容器(Associative Container) |
可逆容器(Reversible Container) | List | Set Multiset Map Multimap |
随机访问容器(Random Container) | Vector Deque |
关于每个容器的用法将在后续介绍。
(1)std::vector:
(2)std::deque:
(3)std::list:
(4)std::forward_list: