STL 中的 `` 头文件是 C++ 标准库中最强大、最常用的部分之一,提供了大量通用算法函数,能与任意容器(`vector`, `list`, `deque`, `array`, `set` 等)协同使用。 下面是 `#include ` 中 **全部主要算法的用法大全**,按功能分类汇总: --- ## 🧮 一、非修改序列操作 | 函数 | 作用 | | ------------------------------------ | ----------------- | | `all_of(begin, end, pred)` | 是否所有元素都满足条件 | | `any_of(begin, end, pred)` | 是否有任意元素满足条件 | | `none_of(begin, end, pred)` | 所有元素都不满足条件 | | `for_each(begin, end, func)` | 对所有元素执行函数 | | `count(begin, end, val)` | 统计某值出现次数 | | `count_if(begin, end, pred)` | 满足条件的个数 | | `mismatch(begin1, end1, begin2)` | 找出两个序列第一个不匹配的位置 | | `equal(begin1, end1, begin2)` | 判断两个序列是否相等 | | `find(begin, end, val)` | 查找某值 | | `find_if(begin, end, pred)` | 查找满足条件的第一个元素 | | `find_if_not(begin, end, pred)` | 查找第一个不满足条件的元素 | | `adjacent_find(begin, end)` | 查找连续重复的元素 | | `search(begin1, end1, begin2, end2)` | 在一个序列中查找子序列 | | `search_n(begin, end, count, val)` | 查找连续 count 个相同元素 | | `find_end(...)` | 查找最后一次出现的子序列 | | `find_first_of(...)` | 查找第一个在另一个集合中出现的元素 | --- ## ✂️ 二、修改序列操作 | 函数 | 作用 | | --------------------------------------------- | -------------- | | `copy(begin, end, dest_begin)` | 拷贝元素 | | `copy_if(begin, end, dest_begin, pred)` | 拷贝满足条件的元素 | | `copy_n(begin, n, dest)` | 拷贝 n 个元素 | | `move(begin, end, dest)` | 移动元素 | | `swap_ranges(begin1, end1, begin2)` | 交换两个范围的元素 | | `fill(begin, end, val)` | 填充区间 | | `fill_n(begin, n, val)` | 填充 n 个元素 | | `generate(begin, end, func)` | 用函数生成数据填充 | | `generate_n(begin, n, func)` | 生成 n 个元素填充 | | `remove(begin, end, val)` | 移除某个值(不改变容器大小) | | `remove_if(begin, end, pred)` | 移除满足条件的元素 | | `replace(begin, end, old_val, new_val)` | 替换值 | | `replace_if(begin, end, pred, new_val)` | 满足条件的元素替换为新值 | | `reverse(begin, end)` | 反转 | | `rotate(begin, middle, end)` | 旋转元素(左移) | | `shuffle(begin, end, rng)` | 随机打乱(C++11) | | `unique(begin, end)` | 删除连续重复元素 | | `transform(begin, end, dest, func)` | 一元函数转换 | | `transform(begin1, end1, begin2, dest, func)` | 二元函数转换 | --- ## 🔍 三、排序和相关算法 | 函数 | 作用 | | ------------------------ | ----------- | | `sort(begin, end)` | 默认升序排序 | | `sort(begin, end, comp)` | 自定义比较函数排序 | | `stable_sort(...)` | 稳定排序 | | `partial_sort(...)` | 部分排序 | | `partial_sort_copy(...)` | 排序后复制一部分 | | `nth_element(...)` | 找第 n 小的元素 | | `is_sorted(...)` | 判断是否已排序 | | `is_sorted_until(...)` | 返回第一个未排序的位置 | --- ## 📌 四、集合操作(前提:有序) | 函数 | 作用 | | ----------------------------------------- | ------------- | | `merge(begin1, end1, begin2, end2, dest)` | 合并两个有序区间 | | `inplace_merge(begin, mid, end)` | 原地合并 | | `includes(...)` | 判断一个集合是否包含另一个 | | `set_union(...)` | 并集 | | `set_intersection(...)` | 交集 | | `set_difference(...)` | 差集 | | `set_symmetric_difference(...)` | 对称差集(A ⊕ B) | --- ## 🧩 五、堆操作 | 函数 | 作用 | | ----------------------- | --------- | | `make_heap(begin, end)` | 建堆 | | `push_heap(begin, end)` | 加入新元素后调整 | | `pop_heap(begin, end)` | 弹出堆顶 | | `sort_heap(begin, end)` | 堆排序 | | `is_heap(begin, end)` | 判断是否为堆 | | `is_heap_until(...)` | 返回第一个非堆位置 | --- ## 🗂 六、最值和比较 | 函数 | 作用 | | ------------------------------ | -------------- | | `min(a, b)` / `max(a, b)` | 最小/最大值(支持比较函数) | | `minmax(a, b)` | 同时取 min 和 max | | `min_element(begin, end)` | 序列中最小值迭代器 | | `max_element(begin, end)` | 序列中最大值迭代器 | | `minmax_element(...)` | 一次遍历取最小和最大元素 | | `lexicographical_compare(...)` | 字典序比较 | | `next_permutation(...)` | 下一个排列 | | `prev_permutation(...)` | 上一个排列 | | `clamp(val, lo, hi)` | 限制在区间内(C++17) | --- ## 🧠 七、数值算法(需 `` 头文件) | 函数 | 作用 | | ------------------------------ | ----- | | `accumulate(begin, end, init)` | 求和 | | `accumulate(..., op)` | 自定义加法 | | `inner_product(...)` | 内积 | | `adjacent_difference(...)` | 相邻差 | | `partial_sum(...)` | 部分和 | --- ## 示例:几个常用算法 ```cpp #include #include #include #include // accumulate int main() { std::vector v{5, 1, 3, 3, 9, 7}; std::sort(v.begin(), v.end()); // 排序 std::reverse(v.begin(), v.end()); // 反转 auto it = std::find(v.begin(), v.end(), 3); // 查找3 int cnt = std::count(v.begin(), v.end(), 3); // 统计3的个数 int sum = std::accumulate(v.begin(), v.end(), 0); // 求和 for (int x : v) std::cout << x << ' '; std::cout << "\n3出现在了 " << cnt << " 次,和为 " << sum << std::endl; } ```