STL库简介

速发365网址 2025-10-16 08:59:59 admin 8302 426
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)

行为类似函数的对象

头文件:包含:算术/关系/逻辑运算的函数对象适配器:bind(C++11), mem_fn新特性:function(类型擦除的函数包装器), lambda(C++11)

5. 智能指针(C++11起)

自动内存管理

unique_ptr:独占所有权指针shared_ptr:共享所有权指针weak_ptr:shared_ptr的弱引用

6. 数值处理

头文件:, , , (C++11)随机数引擎和分布(C++11)复数运算:complex

7. 时间库(C++11起)

头文件:时间点:time_point时间段:duration时钟:system_clock, steady_clock

8. 异常处理

标准异常类体系(继承自exception):

logic_error(如invalid_argument)runtime_error(如overflow_error)

9. 字符串处理

string 和 wstring(在中)正则表达式支持(C++11):

10. I/O流库

头文件:, , 类:istream, ostream, fstream, stringstream

11. 线程支持库(C++11起)

, , , 线程管理:thread, async同步机制:mutex, condition_variable

12. 其他实用组件

工具类:

pair(键值对)tuple(C++11,多元组)

类型特征:(C++11)编译期有理数:ratio(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满足。

相关推荐