Namespaces
Variants

Constrained algorithms (since C++20)

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types

C++20 在命名空间 std::ranges 中提供了大多数算法的 受约束 版本。在这些算法中,范围可以通过 迭代器 - 哨位 对或单个 range 参数来指定,并且支持投影和成员指针可调用对象。此外,大多数算法的 返回类型 已改为返回算法执行期间计算的所有潜在有用信息。

目录

算法函数对象

算法函数对象 (AFO),非正式称为 niebloid ,是一种 定制点对象 (CPO),其被指定为一个或多个重载函数模板。这些函数模板的名称指代相应的算法函数对象。

对于一个算法函数对象 o ,令 S 为对应的函数模板集合。则对于任意参数序列 args... o ( args... ) s ( args... ) 表达式等价 ,其中对 s 进行名称查找的结果为重载集 S

命名空间 std::ranges 中的约束算法被定义为算法函数对象。因此:

受约束算法

定义于头文件 <algorithm>
定义于 命名空间 std::ranges
非修改型序列操作
检查谓词是否对范围中的所有、任一或没有元素为 true
(算法函数对象)
函数对象 应用一元操作到 范围 中的元素
(算法函数对象)
对序列的前N个元素应用函数对象
(算法函数对象)
返回满足特定条件的元素数量
(算法函数对象)
查找两个范围首次出现差异的位置
(算法函数对象)
判断两组元素是否相同
(算法函数对象)
若一个范围按字典序小于另一个范围则返回 true
(算法函数对象)
查找满足特定条件的首个元素
(算法函数对象)
查找满足特定条件的最后一个元素
(算法函数对象)
在特定范围内查找元素的最后序列
(算法函数对象)
搜索一组元素中的任意一个元素
(算法函数对象)
查找首个相邻的相等元素(或满足给定谓词的元素对)
(算法函数对象)
搜索元素范围的首次出现
(算法函数对象)
在范围中搜索首次出现的连续多个相同元素
(算法函数对象)
检查范围是否包含给定元素或子范围
(算法函数对象)
检查一个范围是否以另一个范围开头
(算法函数对象)
检查一个范围是否以另一个范围结尾
(算法函数对象)
修改序列操作
将元素范围复制到新位置
(算法函数对象)
复制指定数量的元素到新位置
(算法函数对象)
以逆序复制范围内的元素
(算法函数对象)
将元素范围移动到新位置
(算法函数对象)
将元素范围按逆序移动到新位置
(算法函数对象)
为范围内的元素赋予指定值
(算法函数对象)
对指定数量的元素赋值
(算法函数对象)
对范围内的元素应用函数
(算法函数对象)
将函数的执行结果保存到范围中
(算法函数对象)
保存函数应用 N 次的结果
(算法函数对象)
移除满足特定条件的元素
(算法函数对象)
复制范围元素并忽略满足特定条件的元素
(算法函数对象)
将满足特定条件的所有值替换为另一个值
(算法函数对象)
复制一个范围,将满足特定条件的元素替换为另一个值
(算法函数对象)
交换两个元素范围
(算法函数对象)
反转范围中元素的顺序
(算法函数对象)
创建反转范围的副本
(算法函数对象)
旋转范围内的元素顺序
(算法函数对象)
复制并旋转元素范围
(算法函数对象)
随机重排范围内的元素
(算法函数对象)
移动范围内的元素
(算法函数对象)
从序列中随机选择 N 个元素
(算法函数对象)
移除范围中的连续重复元素
(算法函数对象)
创建不包含连续重复元素的区间副本
(算法函数对象)
分区操作
判断范围是否按给定谓词被划分
(算法函数对象)
将元素范围划分为两组
(算法函数对象)
复制范围并将元素划分为两组
(算法函数对象)
将元素划分为两组并保持其相对顺序
(算法函数对象)
定位已分区范围的分割点
(算法函数对象)
排序操作
检查范围是否按升序排序
(算法函数对象)
寻找最大有序子范围
(算法函数对象)
将范围按升序排序
(算法函数对象)
对范围的前 N 个元素进行排序
(算法函数对象)
复制并部分排序元素范围
(算法函数对象)
对元素范围进行排序并保持相等元素间的相对顺序
(算法函数对象)
对给定范围进行部分排序,确保其按指定元素完成划分
(算法函数对象)
二分查找操作(作用于有序区间)
返回指向首个 不小于 给定值的元素的迭代器
(算法函数对象)
返回指向首个 大于 特定值的元素的迭代器
(算法函数对象)
确定元素是否存在于部分有序范围内
(算法函数对象)
返回匹配特定键的元素范围
(算法函数对象)
集合操作(作用于已排序范围)
合并两个已排序的范围
(算法函数对象)
原地合并两个有序范围
(算法函数对象)
若一个序列是另一个序列的子序列则返回 true
(算法函数对象)
计算两个集合的差集
(算法函数对象)
计算两个集合的交集
(算法函数对象)
计算两个集合的对称差
(算法函数对象)
计算两个集合的并集
(算法函数对象)
堆操作
检查给定范围是否为最大堆
(算法函数对象)
寻找构成最大堆的最大子范围
(算法函数对象)
将范围内的元素构建为最大堆
(算法函数对象)
向最大堆添加元素
(算法函数对象)
从最大堆中移除最大元素
(算法函数对象)
将最大堆转换为按升序排序的元素范围
(算法函数对象)
最小/最大操作
返回给定值中的较大者
(算法函数对象)
返回范围中的最大元素
(算法函数对象)
返回给定值中的较小值
(算法函数对象)
返回范围内的最小元素
(算法函数对象)
返回两个元素中的较小值和较大值
(算法函数对象)
返回范围中的最小和最大元素
(算法函数对象)
将值限制在一对边界值之间
(算法函数对象)
置换操作
判断一个序列是否是另一个序列的排列
(算法函数对象)
生成元素范围的下一个更大字典序排列
(算法函数对象)
生成元素范围的下一个较小字典序排列
(算法函数对象)

受约束数值运算

定义于头文件 <numeric>
定义于命名空间 std::ranges
用起始值的连续增量填充范围
(算法函数对象)

受限折叠操作

定义于头文件 <algorithm>
定义于命名空间 std::ranges
左折叠元素范围
(算法函数对象)
使用首元素作为初始值左折叠元素范围
(算法函数对象)
右折叠元素范围
(算法函数对象)
使用末元素作为初始值右折叠元素范围
(算法函数对象)
左折叠元素范围,并返回 pair (迭代器, 值)
(算法函数对象)
使用首元素作为初始值左折叠元素范围,并返回 pair (迭代器, optional )
(算法函数对象)

受约束的未初始化内存算法

定义于头文件 <memory>
定义于命名空间 std::ranges
复制对象范围到未初始化的内存区域
(算法函数对象)
复制指定数量的对象到未初始化的内存区域
(算法函数对象)
复制对象到由范围定义的未初始化内存区域
(算法函数对象)
复制对象到由起始点和计数定义的未初始化内存区域
(算法函数对象)
移动对象范围到未初始化的内存区域
(算法函数对象)
移动指定数量的对象到未初始化的内存区域
(算法函数对象)
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)
通过 默认初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(算法函数对象)
通过 值初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)
通过 值初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(算法函数对象)
销毁对象范围
(算法函数对象)
销毁范围内的指定数量的对象
(算法函数对象)
销毁给定地址处的对象
(算法函数对象)
在给定地址处创建对象
(算法函数对象)

受限随机数生成算法

定义于头文件 <random>
定义于命名空间 std::ranges
用均匀随机比特生成器生成的随机数填充范围
(算法函数对象)

返回类型

定义于头文件 <algorithm>
定义于命名空间 std::ranges
提供将迭代器和函数对象作为单一单元存储的方式
(类模板)
提供将两个迭代器作为单一单元存储的方式
(类模板)
提供将两个迭代器作为单一单元存储的方式
(类模板)
提供将三个迭代器作为单一单元存储的方式
(类模板)
提供将三个迭代器作为单一单元存储的方式
(类模板)
提供将两个相同类型的对象或引用作为单一单元存储的方式
(类模板)
提供将迭代器和布尔标志作为单一单元存储的方式
(类模板)
提供将迭代器和值作为单一单元存储的方式
(类模板)
提供将迭代器和值作为单一单元存储的方式
(类模板)

注释

特性测试 标准 特性
__cpp_lib_algorithm_default_value_type 202403L (C++26) 算法的列表初始化
__cpp_lib_ranges 201911L (C++20) 范围库 约束算法
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges 折叠算法
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with , std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left , std::shift_right
202202L (C++23) std::ranges::shift_left , std::ranges::shift_right
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 适用版本 发布行为 正确行为
P3136R1 C++20 niebloids 允许被指定为函数对象以外的特殊实体 必须被指定为函数对象