概览
C++标准模板库(STL)提供了多种容器,主要有以下几类:
一、序列容器
std::vector
:动态数组,支持快速随机访问。可以在尾部高效地添加和删除元素,但在中间插入和删除元素可能比较耗时,因为可能需要移动大量元素。
std::deque
:双端队列,支持在两端高效地添加和删除元素,也支持随机访问,但随机访问的性能通常不如
vector
。
std::list
:双向链表,在任意位置插入和删除元素都非常高效,但不支持随机访问。
std::forward_list
:单向链表,相比
std::list
更节省空间,只支持单向遍历,在一些特定场景下性能更好。
std::array
静态数组
二、关联容器
std::set
和std::multiset
:基于红黑树实现的集合,元素是有序的,不允许重复元素(
std::set
)或允许重复元素(std::multiset
)。查找、插入和删除操作的时间复杂度为对数时间。
std::map
和std::multimap
:基于红黑树实现的关联数组,元素是键值对,键是唯一的(
std::map
)或可以重复(std::multimap
)。查找、插入和删除操作的时间复杂度为对数时间。
std::unordered_set
和std::unordered_multiset
:基于哈希表实现的集合,元素是无序的,不允许重复元素(
std::unordered_set
)或允许重复元素(std::unordered_multiset
)。平均情况下查找、插入和删除操作的时间复杂度为常数时间,但在最坏情况下可能退化为线性时间。
std::unordered_map
和std::unordered_multimap
:基于哈希表实现的关联数组,元素是键值对,键是唯一的(
std::unordered_map
)或可以重复(std::unordered_multimap
)。平均情况下查找、插入和删除操作的时间复杂度为常数时间,但在最坏情况下可能退化为线性时间。
三、容器适配器
std::stack
:栈,后进先出(LIFO)的数据结构。
std::queue
:队列,先进先出(FIFO)的数据结构。
std::priority_queue
:优先队列,元素按照优先级排序,优先级高的元素先出队。
Last updated