算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first, last)
,其中 last
指代要查询或修改的最后元素的后一个元素。
有制约算法 C++20 在命名空间 std::vector<int> v = {7, 1, 4, 0, -1}; std::ranges::sort(v); // 有制约算法 头文件 <iterator> 提供为简化常用算法操作的制约而设计的概念和工具模板集合。 | (C++20 起) |
行策略 大多数算法拥有接受执行策略的重载。标准算法库提供几种执行策略,并提供对应执行策略的类型和对象。用户可以静态地选择执行策略,通过以对应类型的执行策略对象为参数,调用并行算法。 标准库实现(但不是用户)可以定义附加的执行策略作为扩展。以实现定义类型的执行策略对象调用的并行算法的语义是实现定义的。
| (C++17 起) |
?
定义于头文件 | |
all_ofany_ofnone_of (C++11)(C++11)(C++11) | 检查谓词是否对范围中所有、任一或无元素为 true (函数模板) |
for_each | 应用函数到范围中的元素 (函数模板) |
for_each_n (C++17) | 应用一个函数对象到序列的前 n 个元素 (函数模板) |
countcount_if | 返回满足指定判别标准的元素数 (函数模板) |
mismatch | 寻找两个范围出现不同的首个位置 (函数模板) |
findfind_iffind_if_not (C++11) | 寻找首个满足特定判别标准的元素 (函数模板) |
find_end | 在特定范围中寻找最后出现的元素序列 (函数模板) |
find_first_of | 搜索元素集合中的任意元素 (函数模板) |
adjacent_find | 查找首对相邻的相同(或满足给定谓词的)元素 (函数模板) |
search | 搜索一个元素范围 (函数模板) |
search_n | 在范围中搜索一定量的某个元素的连续副本 (函数模板) |
定义于头文件 | |
copycopy_if (C++11) | 将某一范围的元素复制到一个新的位置 (函数模板) |
copy_n (C++11) | 将一定数目的元素复制到一个新的位置 (函数模板) |
copy_backward | 按从后往前的顺序复制一个范围内的元素 (函数模板) |
move (C++11) | 将某一范围的元素移动到一个新的位置 (函数模板) |
move_backward (C++11) | 按从后往前的顺序移动某一范围的元素到新的位置 (函数模板) |
fill | 将一个给定值复制赋值给一个范围内的每个元素 (函数模板) |
fill_n | 将一个给定值复制赋值给一个范围内的 N 个元素 (函数模板) |
transform | 将一个函数应用于某一范围的各个元素,并在目标范围存储结果 (函数模板) |
generate | 将相继的函数调用结果赋值给一个范围中的每个元素 (函数模板) |
generate_n | 将相继的函数调用结果赋值给一个范围中的 N 个元素 (函数模板) |
removeremove_if | 移除满足特定判别标准的元素 (函数模板) |
remove_copyremove_copy_if | 复制一个范围的元素,忽略满足特定判别标准的元素 (函数模板) |
replacereplace_if | 将所有满足特定判别标准的值替换为另一个值 (函数模板) |
replace_copyreplace_copy_if | 复制一个范围内的元素,并将满足特定判别标准的元素替换为另一个值 (函数模板) |
swap | 交换两个对象的值 (函数模板) |
swap_ranges | 交换两个范围的元素 (函数模板) |
iter_swap | 交换两个迭代器所指向的元素 (函数模板) |
reverse | 逆转范围中的元素顺序 (函数模板) |
reverse_copy | 创建一个范围的逆向副本 (函数模板) |
shift_leftshift_right (C++20) | 迁移范围中的元素 (函数模板) |
rotate | 旋转范围中的元素顺序 (函数模板) |
rotate_copy | 复制并旋转元素范围 (函数模板) |
random_shuffleshuffle (C++17 前)(C++11) | 随机重排范围中的元素 (函数模板) |
sample (C++17) | 从一个序列中随机选择 n 个元素 (函数模板) |
unique | 移除范围内的连续重复元素 (函数模板) |
unique_copy | 创建某范围的不含连续重复元素的副本 (函数模板) |
定义于头文件 | |
is_partitioned (C++11) | 判断范围是否已按给定的谓词划分 (函数模板) |
partition | 将范围中的元素分为两组 (函数模板) |
partition_copy (C++11) | 复制一个范围,将各元素分为两组 (函数模板) |
stable_partition | 将元素分为两组,同时保留其相对顺序 (函数模板) |
partition_point (C++11) | 定位已划分范围的划分点 (函数模板) |
定义于头文件 | |
is_sorted (C++11) | 检查范围是否已按升序排列 (函数模板) |
is_sorted_until (C++11) | 找出最大的已排序子范围 (函数模板) |
sort | 将范围按升序排序 (函数模板) |
partial_sort | 排序一个范围的前 N 个元素 (函数模板) |
partial_sort_copy | 对范围内的元素进行复制并部分排序 (函数模板) |
stable_sort | 将范围内的元素排序,同时保持相等的元素之间的顺序 (函数模板) |
nth_element | 将给定的范围部分排序,确保其按给定元素划分 (函数模板) |
定义于头文件 | |
lower_bound | 返回指向第一个不小于给定值的元素的迭代器 (函数模板) |
upper_bound | 返回指向第一个大于给定值的元素的迭代器 (函数模板) |
binary_search | 确定元素是否存在于某范围中 (函数模板) |
equal_range | 返回匹配特定键值的元素范围 (函数模板) |
定义于头文件 | |
merge | 归并两个已排序的范围 (函数模板) |
inplace_merge | 就地归并两个有序范围 (函数模板) |
includes | 若一个集合是另一个的子集则返回 true (函数模板) |
set_difference | 计算两个集合的差集 (函数模板) |
set_intersection | 计算两个集合的交集 (函数模板) |
set_symmetric_difference | 计算两个集合的对称差 (函数模板) |
set_union | 计算两个集合的并集 (函数模板) |
定义于头文件 | |
is_heap | 检查给定范围是否为一个最大堆 (函数模板) |
is_heap_until (C++11) | 查找能成为最大堆的最大子范围 (函数模板) |
make_heap | 从一个元素范围创建出一个最大堆 (函数模板) |
push_heap | 将一个元素加入到一个最大堆 (函数模板) |
pop_heap | 从最大堆中移除最大元素 (函数模板) |
sort_heap | 将一个最大堆变成一个按升序排序的元素范围 (函数模板) |
定义于头文件 | |
max | 返回各给定值中的较大者 (函数模板) |
max_element | 返回范围内的最大元素 (函数模板) |
min | 返回各给定值中的较小者 (函数模板) |
min_element | 返回范围内的最小元素 (函数模板) |
minmax (C++11) | 返回两个元素的较小和较大者 (函数模板) |
minmax_element (C++11) | 返回范围内的最小元素和最大元素 (函数模板) |
clamp (C++17) | 在一对边界值间夹逼一个值 (函数模板) |
定义于头文件 | |
equal | 确定两个元素集合是否是相同的 (函数模板) |
lexicographical_compare | 当一个范围按字典顺序小于另一个范围时,返回 true (函数模板) |
lexicographical_compare_three_way (C++20) | 用三路比较比较两个范围 (函数模板) |
定义于头文件 | |
is_permutation (C++11) | 判断一个序列是否为另一个序列的排列 (函数模板) |
next_permutation | 产生某个元素范围的按字典顺序的下一个较大的排列 (函数模板) |
prev_permutation | 产生某个元素范围的按字典顺序的下一个较小的排列 (函数模板) |
定义于头文件 | |
iota (C++11) | 用从起始值开始连续递增的值填充一个范围 (函数模板) |
accumulate | 对一个范围内的元素求和 (函数模板) |
inner_product | 计算两个范围的元素的内积 (函数模板) |
adjacent_difference | 计算范围内各相邻元素之间的差 (函数模板) |
partial_sum | 计算范围内元素的部分和 (函数模板) |
reduce (C++17) | 类似 std::accumulate,但不依序执行 (函数模板) |
exclusive_scan (C++17) | 类似 std::partial_sum,第 i 个和中排除第 i 个输入 (函数模板) |
inclusive_scan (C++17) | 类似 std::partial_sum,第 i 个和中包含第 i 个输入 (函数模板) |
transform_reduce (C++17) | 应用一个函数对象,然后以乱序规约 (函数模板) |
transform_exclusive_scan (C++17) | 应用一个函数对象,然后进行排除扫描 (函数模板) |
transform_inclusive_scan (C++17) | 应用一个函数对象,然后进行包含扫描 (函数模板) |
定义于头文件 | |
uninitialized_copy | 将范围内的对象复制到未初始化的内存区域 (函数模板) |
uninitialized_copy_n (C++11) | 将指定数量的对象复制到未初始化的内存区域 (函数模板) |
uninitialized_fill | 复制一个对象到以范围定义的未初始化内存区域 (函数模板) |
uninitialized_fill_n | 复制一个对象到以起点和计数定义的未初始化内存区域 (函数模板) |
uninitialized_move (C++17) | 移动一个范围的对象到未初始化的内存区域 (函数模板) |
uninitialized_move_n (C++17) | 移动一定数量对象到未初始化内存区域 (函数模板) |
uninitialized_default_construct (C++17) | 在范围所定义的未初始化的内存区域以默认初始化构造对象 (函数模板) |
uninitialized_default_construct_n (C++17) | 在起始和计数所定义的未初始化内存区域用默认初始化构造对象 (函数模板) |
uninitialized_value_construct (C++17) | 在范围所定义的未初始化内存中用值初始化构造对象 (函数模板) |
uninitialized_value_construct_n (C++17) | 在起始和计数所定义的未初始化内存区域以值初始化构造对象 (函数模板) |
destroy_at (C++17) | 销毁在给定地址的对象 (函数模板) |
destroy (C++17) | 销毁一个范围中的对象 (函数模板) |
destroy_n (C++17) | 销毁范围中一定数量的对象 (函数模板) |
定义于头文件 | |
qsort | 对未指定类型的元素的一个范围进行排序 (函数) |
bsearch | 在未指定类型的数组中搜索元素 (函数) |