C++ 标准模板库(STL)提供了丰富的通用数据结构和算法组件,主要分为以下几类:
1. 容器(Containers)
- 序列容器:存储有序元素集合
vector:动态数组,支持快速随机访问deque:双端队列,两端高效插入/删除list:双向链表forward_list(C++11):单向链表array(C++11):固定大小数组string:字符串专用容器
- 关联容器:基于键的排序集合(通常红黑树实现)
set:唯一键集合,有序map:键值对映射,键唯一有序multiset:允许重复键的有序集合multimap:允许重复键的有序映射
- 无序关联容器(C++11):哈希表实现
unordered_set:唯一键哈希集合unordered_map:键值对哈希映射unordered_multiset:重复键哈希集合unordered_multimap:重复键哈希映射
- 容器适配器:基于其他容器实现的接口
stack:LIFO(后进先出)栈queue:FIFO(先进先出)队列priority_queue:优先级队列(最大堆)
2. 算法(Algorithms)
- 在
<algorithm>中定义,操作于容器上的泛型算法- 排序:
sort,stable_sort,partial_sort - 查找:
find,find_if,binary_search - 数值操作:
accumulate,inner_product - 集合操作:
set_union,set_difference - 修改序列:
copy,move,transform - 删除:
remove,unique - 堆操作:
make_heap,push_heap - 遍历:
for_each(C++11起支持并行版本)
- 排序:
3. 迭代器(Iterators)
- 提供访问容器元素的通用方法
- 类别:输入/输出、前向、双向、随机访问迭代器
- 适配器:
reverse_iterator,move_iterator(C++11) - 特殊迭代器:
back_inserter,front_inserter
4. 函数对象(Function Objects)
- 行为类似函数的对象
- 头文件:
<functional> - 包含:算术/关系/逻辑运算的函数对象
- 适配器:
bind(C++11),mem_fn - 新特性:
function(类型擦除的函数包装器),lambda(C++11)
- 头文件:
5. 智能指针(C++11起)
- 自动内存管理
unique_ptr:独占所有权指针shared_ptr:共享所有权指针weak_ptr:shared_ptr的弱引用
6. 数值处理
- 头文件:
<numeric>,<cmath>,<complex>,<random>(C++11) - 随机数引擎和分布(C++11)
- 复数运算:
complex
7. 时间库(C++11起)
- 头文件:
<chrono> - 时间点:
time_point - 时间段:
duration - 时钟:
system_clock,steady_clock
8. 异常处理
- 标准异常类体系(继承自
exception):logic_error(如invalid_argument)runtime_error(如overflow_error)
9. 字符串处理
string和wstring(在<string>中)- 正则表达式支持(C++11):
<regex>
10. I/O流库
- 头文件:
<iostream>,<fstream>,<sstream> - 类:
istream,ostream,fstream,stringstream
11. 线程支持库(C++11起)
<thread>,<mutex>,<atomic>,<future>- 线程管理:
thread,async - 同步机制:
mutex,condition_variable
12. 其他实用组件
- 工具类:
pair(键值对)tuple(C++11,多元组)
- 类型特征:
<type_traits>(C++11) - 编译期有理数:
ratio(C++11)
常用容器选择指南
| 需求场景 | 推荐容器 |
|---|---|
| 快速随机访问 | vector, array |
| 频繁头尾插入删除 | deque |
| 中间插入/删除 | list(小数据量) |
| 唯一键快速查找(有序) | map/set |
| 唯一键最快查找(无序) | unordered_map/set |
| LIFO栈 | stack(适配器) |
| FIFO队列 | queue(适配器) |
| 优先级队列 | priority_queue |
重要原则:
- 默认首选
vector(缓存友好)- 需要键值映射时首选
unordered_map(O(1)查找)- 当元素顺序重要且需要频繁查找时用
map- 避免在
vector中间插入,除非数据量小
STL的设计遵循以下核心思想:
- 泛型编程:通过模板实现
- 效率优先:零开销抽象
- 互操作性:容器与算法通过迭代器解耦
掌握STL是高效C++开发的基础,现代C++项目90%的日常数据结构需求都可通过STL满足。
C++ STL库全面介绍

3146

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



