STL库简介
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)
在
排序: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)
行为类似函数的对象
头文件:
5. 智能指针(C++11起)
自动内存管理
unique_ptr:独占所有权指针shared_ptr:共享所有权指针weak_ptr:shared_ptr的弱引用
6. 数值处理
头文件:
7. 时间库(C++11起)
头文件:
8. 异常处理
标准异常类体系(继承自exception):
logic_error(如invalid_argument)runtime_error(如overflow_error)
9. 字符串处理
string 和 wstring(在
10. I/O流库
头文件:
11. 线程支持库(C++11起)
12. 其他实用组件
工具类:
pair(键值对)tuple(C++11,多元组)
类型特征:
常用容器选择指南
需求场景推荐容器快速随机访问vector, array频繁头尾插入删除deque中间插入/删除list(小数据量)唯一键快速查找(有序)map/set唯一键最快查找(无序)unordered_map/setLIFO栈stack(适配器)FIFO队列queue(适配器)优先级队列priority_queue
重要原则:
默认首选 vector(缓存友好)需要键值映射时首选 unordered_map(O(1)查找)当元素顺序重要且需要频繁查找时用 map避免在 vector 中间插入,除非数据量小
STL的设计遵循以下核心思想:
泛型编程:通过模板实现效率优先:零开销抽象互操作性:容器与算法通过迭代器解耦
掌握STL是高效C++开发的基础,现代C++项目90%的日常数据结构需求都可通过STL满足。