在C++中,除了 std::vector
和 std::list
,标准库还提供了多种其他容器,它们各自基于不同的数据结构和设计目标。以下是常见容器的分类及特点:
一、序列容器(按顺序存储元素)
1. std::deque
(双端队列)
-
特性:
- 支持两端高效插入/删除(O(1))。
- 随机访问效率较高(O(1)),但比
vector
略慢。 - 内部由多个连续内存块组成,无需像
vector
那样频繁扩容。
-
适用场景:
- 需要在头部和尾部同时进行插入/删除(如实现队列)。
- 随机访问需求,但不希望像
vector
那样频繁扩容。
-
示例:
std::deque<int> dq; dq.push_front(1); // 头部插入 dq.push_back(2); // 尾部插入 std::cout << dq[0]; // 随机访问
2. std::forward_list
(单向链表)
-
特性:
- 单链表结构,每个节点仅指向下一个节点。
- 比
list
更节省空间(每个节点只需一个指针)。 - 只支持单向迭代,插入/删除操作效率与
list
类似。
-
适用场景:
- 仅需单向遍历,且内存效率优先的场景。
- 实现算法时需要单向链表结构(如哈希表的冲突链)。
-
示例:
std::forward_list<int> fl; fl.push_front(1); // 仅支持头部插入
二、关联容器(基于键值对存储,支持快速查找)
1. std::set
/ std::multiset
-
特性:
- 基于红黑树实现,元素自动排序(默认升序)。
set
中元素唯一,multiset
允许重复元素。- 插入、删除、查找操作时间复杂度均为 O(log n)。
-
适用场景:
- 需要自动去重并排序的场景。
- 快速判断元素是否存在(如集合操作)。 <