算法库
来自cppreference.com
< cpp
算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first, last)
,其中 last
指代要查询或修改的最后元素的后一个元素。
执行策略大多数算法拥有接受执行策略的重载。标准算法库提供三种执行策略:有序、并行及并行加向量,且标准库提供对应执行策略的类型和对象。用户可以静态地选择执行策略,通过调用并行算法,以对应类型的执行策略对象为参数: std::execution::seq 、 std::execution::par 或 std::execution::par_unseq 。 标准库实现(但不是用户)可以定义附加的执行策略作为扩展。以实现定义类型的执行策略对象调用的并行算法的语义是实现定义的。
| (C++17 起) |
不修改序列的操作 | |
定义于头文件 <algorithm> | |
(C++11) (C++11) (C++11) | 检查一定范围之内,是否全部、存在或不存在元素使得谓词为true (函数模板) |
将一个函数应用于某一范围的元素 (函数模板) | |
(C++17) | 应用函数对象到序列的首 n 个元素 (函数模板) |
返回满足指定判别的元素数 (函数模板) | |
查找两个范围第一个不同元素的位置 (函数模板) | |
(C++11) | 查找满足特定条件的第一个元素 (函数模板) |
查找一定范围内最后出现的元素序列 (函数模板) | |
查找元素集合中的任意元素 (函数模板) | |
查找彼此相邻的两个相同(或其它的关系)的元素 (函数模板) | |
查找一个元素区间 (函数模板) | |
在区间中搜索连续一定数目次出现的元素 (函数模板) | |
修改序列的操作 | |
定义于头文件 <algorithm> | |
(C++11) | 将某一范围的元素复制到一个新的位置 (函数模板) |
(C++11) | 复制一定数目的元素到新的位置 (函数模板) |
按从后往前的顺序复制一个范围内的元素 (函数模板) | |
(C++11) | 将某一范围的元素移动到一个新的位置 (函数模板) |
(C++11) | 按从后往前的顺序移动某一范围的元素到新的位置 (函数模板) |
将一个值赋给一个范围内的元素 (函数模板) | |
将一个值赋给一定数目的元素 (函数模板) | |
将一个函数应用于某一范围的元素 (函数模板) | |
赋值相继的函数调用结果给范围中的每个元素 (函数模板) | |
赋值相继的函数调用结果给范围中的 N 个元素 (函数模板) | |
移除满足特定标准的元素 (函数模板) | |
复制一个范围内不满足特定条件的元素 (函数模板) | |
将所有满足特定条件的元素替换为另一个值 (函数模板) | |
复制一个范围内的元素,并将满足特定条件的元素替换为另一个值 (函数模板) | |
交换两个对象的值 (函数模板) | |
交换两个范围的元素 (函数模板) | |
交换两个迭代器所指向的元素 (函数模板) | |
将区间内的元素颠倒顺序 (函数模板) | |
将区间内的元素颠倒顺序并复制 (函数模板) | |
将区间内的元素旋转 (函数模板) | |
将区间内的元素旋转并复制 (函数模板) | |
将范围内的元素随机重新排序 (函数模板) | |
(C++17) | 从一个序列中随机选择 n 个元素 (函数模板) |
删除区间内连续重复的元素 (函数模板) | |
删除区间内连续重复的元素并复制 (函数模板) | |
划分操作 | |
定义于头文件 <algorithm> | |
(C++11) | 判断区间是否被给定的谓词划分 (函数模板) |
把一个区间的元素分为两组 (函数模板) | |
(C++11) | 将区间内的元素分为两组复制到不同位置 (函数模板) |
将元素分为两组,同时保留其相对顺序 (函数模板) | |
(C++11) | 定位已划分的区域的划分点 (函数模板) |
排序操作 | |
定义于头文件 <algorithm> | |
(C++11) | 检查区间元素是否按升序排列 (函数模板) |
(C++11) | 找出最大的已排序子范围 (函数模板) |
将区间按升序排序 (函数模板) | |
将区间内较小的N个元素排序 (函数模板) | |
对区间内的元素进行复制并部分排序 (函数模板) | |
将区间内的元素排序,同时保持相等的元素之间的顺序 (函数模板) | |
将给定的区间部分排序,确保区间被给定的元素划分 (函数模板) | |
二分搜索操作(在已排序范围上) | |
定义于头文件 <algorithm> | |
返回指向第一个不小于给定值的元素的迭代器 (函数模板) | |
返回指向第一个大于给定值的元素的迭代器 (函数模板) | |
判断一个元素是否在区间内 (函数模板) | |
返回匹配特定键值的元素区间 (函数模板) | |
集合操作(在已排序范围上) | |
定义于头文件 <algorithm> | |
合并两个已排序的区间 (函数模板) | |
就地合并两个有序的区间 (函数模板) | |
如果一个集合是另外一个集合的子集则返回true (函数模板) | |
计算两个集合的差集 (函数模板) | |
计算两个集合的交集 (函数模板) | |
计算两个集合的对称差 (函数模板) | |
计算两个集合的并集 (函数模板) | |
堆操作 | |
定义于头文件 <algorithm> | |
检查给定的区间是否为一个堆 (函数模板) | |
(C++11) | 查找区间中为堆的最大子区间 (函数模板) |
根据区间内的元素创建出一个堆 (函数模板) | |
将元素加入到堆 (函数模板) | |
将堆中的最大元素删除 (函数模板) | |
将堆变成一个排好序的区间 (函数模板) | |
最小/最大操作 | |
定义于头文件 <algorithm> | |
返回两个元素中的较大者 (函数模板) | |
返回区间内的最大元素 (函数模板) | |
返回两个元素中的较小者 (函数模板) | |
返回区间内的最小元素 (函数模板) | |
(C++11) | 返回两个元素中的的较大者和较小者 (函数模板) |
(C++11) | 返回区间内的最小元素和最大元素 (函数模板) |
(C++17) | 在一对边界值间夹住一个值 (函数模板) |
比较操作 | |
定义于头文件 <algorithm> | |
确定两个元素集合是否是相同的 (函数模板) | |
如果按字典顺序一个区间小于另一个区间,返回true (函数模板) | |
(C++20) | 用三路比较比较二个值 (函数模板) |
(C++20) | 用三路比较比价二个范围 (函数模板) |
排列操作 | |
定义于头文件 <algorithm> | |
(C++11) | 判断一个序列是否为另一个序列的排列组合 (函数模板) |
按字典顺序产生区间内元素下一个较大的排列组合 (函数模板) | |
按字典顺序产生区间内元素下一个较小的排列组合 (函数模板) | |
数值运算 | |
定义于头文件 <numeric> | |
(C++11) | 用从起始值开始连续递增的值填充区间 (函数模板) |
计算区间内元素的和 (函数模板) | |
计算两个区间元素的内积 (函数模板) | |
计算区间内相邻元素之间的差 (函数模板) | |
计算区间内元素的部分和 (函数模板) | |
(C++17) | 类似 std::accumulate ,除了以乱序 (函数模板) |
(C++17) | 类似 std::partial_sum ,第 i 个和中排除第 i 个输入 (函数模板) |
(C++17) | 类似 std::partial_sum ,第 i 个和中包含第 i 个输入 (函数模板) |
(C++17) | 应用函数对象,然后以乱序规约 (函数模板) |
(C++17) | 应用函数对象,然后进行排除扫描 (函数模板) |
(C++17) | 应用函数对象,然后进行包含扫描 (函数模板) |
未初始化内存上的操作 |
定义于头文件 <memory> | |
将范围内的对象复制到未初始化的内存区域 (函数模板) | |
(C++11) | 将指定数量的对象复制到未初始化的内存区域 (函数模板) |
复制一个对象到以范围定义的未初始化内存区域 (函数模板) | |
复制一个对象到以起点和计数定义的未初始化内存区域 (函数模板) | |
(C++17) | 移动一个范围的对象到未初始化的内存区域 (函数模板) |
(C++17) | 移动一定数量对象到未初始化内存区域 (函数模板) |
在范围所定义的未初始化的内存区域以默认初始化构造对象 (函数模板) | |
在起始和计数所定义的未初始化内存区域用默认初始化构造对象 (函数模板) | |
在范围所定义的未初始化内存中用值初始化构造对象 (函数模板) | |
在起始和计数所定义的未初始化内存区域以值初始化构造对象 (函数模板) | |
(C++17) | 销毁在给定地址的对象 (函数模板) |
(C++17) | 销毁一个范围中的对象 (函数模板) |
(C++17) | 销毁范围中一定数量的对象 (函数模板) |
C 库 | |
定义于头文件 <cstdlib> | |
排序类型未指定的元素的范围 (函数) | |
在未指定类型的数组中搜索元素 (函数) |
[编辑]参阅
算法 的 C 文档 |