C++标准库容器分类
C++标准库提供了多种容器,根据其存储方式和特性可分为以下几类:
序列容器(Sequence Containers)
vector:动态数组,支持快速随机访问,尾部插入/删除高效。deque:双端队列,支持头尾高效插入/删除,随机访问性能略低于vector。list:双向链表,任意位置插入/删除高效,但不支持随机访问。forward_list(C++11):单向链表,内存占用更小,仅支持单向遍历。array(C++11):固定大小数组,编译时确定尺寸,无动态内存分配。
关联容器(Associative Containers)
set:有序唯一键集合,基于红黑树实现,查找复杂度O(log n)。multiset:允许重复键的有序集合。map:键值对集合,键唯一且有序。multimap:允许重复键的有序键值对集合。
无序关联容器(Unordered Associative Containers, C++11)
unordered_set:哈希表实现的唯一键集合,平均查找复杂度O(1)。unordered_multiset:允许重复键的哈希集合。unordered_map:哈希表实现的键值对集合。unordered_multimap:允许重复键的哈希键值对集合。
容器适配器(Container Adapters)
stack:基于deque/list/vector的LIFO(后进先出)结构。queue:基于deque/list的FIFO(先进先出)结构。priority_queue:基于vector的优先队列,默认最大堆。
选择容器的关键因素
- 访问模式:频繁随机访问优先选
vector或array;大量插入/删除考虑list或forward_list。 - 排序需求:需要有序数据使用关联容器;无需排序且追求速度用无序容器。
- 内存开销:连续内存容器(如
vector)缓存友好,但扩容可能代价高;链表容器(如list)无扩容问题但内存碎片化更严重。
代码示例:容器声明
#include <vector>
#include <unordered_map>
#include <stack>
std::vector<int> vec = {1, 2, 3}; // 动态数组
std::unordered_map<std::string, int> umap; // 哈希表
std::stack<double> stk; // 栈适配器
2182

被折叠的 条评论
为什么被折叠?



