STL(Standard Template Library,标准模板库)是 C++ 标准库的一部分,提供了一系列通用的模板类和函数,用于实现常见的数据结构和算法。STL 容器是其中的一个重要部分,用于存储和管理数据。
STL 容器主要分为以下几类:
-
序列容器(Sequence Containers): 序列容器以线性序列的形式存储元素,可以按照插入的顺序访问元素,并支持在任意位置插入或删除元素。常见的序列容器包括:
std::vector
:动态数组,支持快速的随机访问和在尾部添加元素。std::deque
:双端队列,支持在头部和尾部快速插入和删除元素。std::list
:双向链表,支持在任意位置快速插入和删除元素,但不支持随机访问。
-
关联容器(Associative Containers): 关联容器以键-值对(key-value)的形式存储元素,元素之间是有序的,并且可以根据键快速查找元素。常见的关联容器包括:
std::set
:基于红黑树实现的集合,元素按照升序排列,不允许重复元素。std::map
:基于红黑树实现的关联数组,每个元素包含一个键和一个值,按照键的升序排列,不允许重复的键。std::multiset
:允许重复元素的集合,其他特性与std::set
相似。std::multimap
:允许重复键的关联数组,其他特性与std::map
相似。
-
无序关联容器(Unordered Associative Containers): 无序关联容器以哈希表的形式存储元素,元素之间没有明确定义的顺序,并且可以根据键快速查找元素。常见的无序关联容器包括:
std::unordered_set
:基于哈希表实现的集合,元素之间无序,不允许重复元素。std::unordered_map
:基于哈希表实现的关联数组,元素之间无序,不允许重复的键。std::unordered_multiset
:允许重复元素的集合,其他特性与std::unordered_set
相似。std::unordered_multimap
:允许重复键的关联数组,其他特性与std::unordered_map
相似。
-
适配器容器(Container Adapters): 适配器容器是对其他容器的封装,提供了特定的接口和行为。常见的适配器容器包括:
std::stack
:栈,基于deque
、list
或vector
实现的后进先出(LIFO)数据结构。std::queue
:队列,基于deque
或list
实现的先进先出(FIFO)数据结构。std::priority_queue
:优先队列,基于vector
实现的优先级队列,元素按照一定的优先级顺序出队。
这些容器提供了不同的特性和适用场景,可以根据具体的需求选择合适的容器类型。