1. 序列容器(Sequence Containers)
这类容器主要用于存储按顺序排列的元素,它们包括:
std::array
:固定大小的数组,提供快速的固定大小数组操作。std::deque
:双端队列,可以在头尾两端快速插入和删除元素。std::forward_list
:单向链表,提供高效的元素插入和删除操作,但不支持随机访问。std::list
:双向链表,支持从任何位置快速插入和删除元素。std::vector
:动态数组,支持快速随机访问,尾部插入和删除也非常高效。
2. 关联容器(Associative Containers)
这些容器基于红黑树实现,主要用于存储有序数据,包括:
std::map
:存储键值对,按键排序。std::set
:存储独一无二的元素,按元素排序。
3. 无序关联容器(Unordered Associative Containers)
基于哈希表实现,用于快速数据访问,不保持元素顺序:
std::unordered_map
:存储键值对,不按键排序。std::unordered_set
:存储独一无二的元素,不按元素排序。
4. 容器适配器(Container Adaptors)
这些容器通过对其他容器类型的封装提供特定的数据结构功能:
std::queue
:队列,先进先出(FIFO)数据结构。std::stack
:栈,后进先出(LIFO)数据结构。std::flat_map
和std::flat_set
:基于排序数组的映射和集合,通常实现为一个对有序向量的封装,提供比标准关联容器更优的空间利用率和访问速度。
5. 视图(Views)
std::span
:提供对数组或其他连续存储的数据结构的引用视图,使得可以安全地访问底层数据而无需拷贝。std::mdspan
:提供对多维数据的视图,支持高效的数据操作和访问。
每种容器都有其特定的用途和优缺点,选择合适的容器可以大大提高程序的效率和性能。