C++STL概览
- 手机
- 2025-09-11 19:12:02

一、核心组成模块 1. 容器体系(Containers)
序列容器
vector:动态数组(随机访问O(1),尾部插入O(1))deque:双端队列(支持高效首尾插入)list:双向链表(任意位置插入O(1),但无随机访问)forward_list(C++11):单向链表(内存占用更小)关联容器
map/set:红黑树实现的有序容器(查找O(logN))multimap/multiset:允许重复键值无序容器(C++11)
unordered_map/unordered_set:哈希表实现(平均查找O(1))支持自定义哈希函数与等价谓词容器适配器
stack:默认基于deque实现的后进先出结构queue:先进先出队列(可基于list优化)priority_queue:堆结构实现的最大优先级队列2. 算法框架(Algorithms)
泛型算法设计
解耦数据与操作:通过迭代器接口统一访问容器典型算法: 排序:sort(快速排序)、stable_sort(归并排序)查找:find(线性搜索)、binary_search(二分查找)数值运算:accumulate(累加)、partial_sum(前缀和)策略定制
支持自定义比较器(如greater<>改变排序顺序)谓词函数:find_if等算法可配合lambda表达式3. 迭代器机制(Iterators)
类型体系
迭代器类型支持操作典型容器输入迭代器只读、单遍扫描istream_iterator输出迭代器只写、单遍扫描ostream_iterator前向迭代器多遍扫描forward_list双向迭代器支持--操作list/map随机访问迭代器支持+n跳转vector/array迭代器适配器
reverse_iterator:逆向遍历容器insert_iterator:实现容器元素的批量插入二、关键扩展组件 1. 函数对象与Lambda
函数对象(Functors)
struct Compare { bool operator()(int a, int b) const { return abs(a) < abs(b); } }; sort(v.begin(), v.end(), Compare());Lambda表达式(C++11)
auto lambda = [threshold](int x) { return x > threshold; }; auto it = find_if(v.begin(), v.end(), lambda); 2. 智能指针体系(C++11)unique_ptr
独占所有权模型,支持自定义删除器 auto ptr = std::make_unique<MyClass>(args);shared_ptr
引用计数实现共享所有权weak_ptr解决循环引用问题 3. 字符串增强 string_view(C++17) 非拥有字符串视图,避免不必要的拷贝 void process(std::string_view sv) { // 可接受string、char[]等多种输入 }三、系统级支持 1. 输入输出系统
流层次结构
高级特性
本地化支持(std::locale)格式化控制(std::format C++20) 2. 并发编程模型线程管理
std::jthread worker([](std::stop_token st) { // C++20 while(!st.stop_requested()) { // 后台任务 } });原子操作
std::atomic<int> counter{0}; counter.fetch_add(1, std::memory_order_relaxed); 3. 数值计算工具随机数库(C++11)
std::mt19937 gen(std::random_device{}()); std::uniform_int_distribution<> dis(1, 6); int dice_roll = dis(gen);复数运算
std::complex<double> z(2, 3); // 2+3i四、现代演进方向
C++标准演进
版本关键特性C++11移动语义、lambda、智能指针C++17结构化绑定、并行算法C++20概念约束(Concepts)、协程C++23堆栈踪(stacktrace)、mdspan 设计哲学泛型编程范式
通过模板实现算法与数据类型的完全解耦例:sort算法可处理任何支持<操作的类型零开销原则
抽象不带来额外运行时开销(如vector与原生数组性能相当)可扩展接口
允许用户自定义类型融入标准库生态(如实现迭代器接口与容器交互)我们在努力扩大自己,以靠近,以触及我们自身以外的世界。 —博尔赫斯谈话录