受约束算法 (C++20 起)
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    C++20 在命名空间 std::ranges 中提供大多数算法的受约束版本,能以迭代器-哨位对或单个 range 参数指定范围,并且支持投影和指向成员指针可调用对象。另外更改了大多数算法的返回类型,以返回算法执行过程中计算的所有潜在有用信息。
受约束算法
|   定义于头文件  
<algorithm>  | |
|   定义于命名空间  
std::ranges | |
 不修改序列的操作 | |
|    (C++20)(C++20)(C++20)  | 
  检查谓词是否对范围中所有、任一或无元素为 true  (niebloid)  | 
|    (C++20)  | 
  应用函数到范围中的元素  (niebloid)  | 
|    (C++20)  | 
   应用函数对象到序列的首 n 个元素  (niebloid)  | 
|    (C++20)(C++20)  | 
  返回满足指定判别标准的元素数  (niebloid)  | 
|    (C++20)  | 
  寻找两个范围出现不同的首个位置  (niebloid)  | 
|    (C++20)  | 
  确定两个元素集合是否是相同的   (niebloid)  | 
|   当一个范围按字典顺序小于另一个范围时,返回 true   (niebloid)  | |
|    (C++20)(C++20)(C++20)  | 
  寻找首个满足特定判别标准的元素  (niebloid)  | 
|    (C++20)  | 
  在特定范围中寻找最后出现的元素序列  (niebloid)  | 
|    (C++20)  | 
  搜索元素集合中的任一元素   (niebloid)  | 
|    (C++20)  | 
   查找首对相邻的相同(或满足给定谓词的)元素   (niebloid)  | 
|    (C++20)  | 
  搜索一个元素范围   (niebloid)  | 
|    (C++20)  | 
  在范围中搜索一定量的某个元素的连续副本   (niebloid)  | 
 修改序列的操作 | |
|    (C++20)(C++20)  | 
  将某一范围的元素复制到一个新的位置   (niebloid)  | 
|    (C++20)  | 
  将一定数目的元素复制到一个新的位置   (niebloid)  | 
|    (C++20)  | 
  按从后往前的顺序复制一个范围内的元素   (niebloid)  | 
|    (C++20)  | 
  将某一范围的元素移动到一个新的位置   (niebloid)  | 
|    (C++20)  | 
  按从后往前的顺序移动某一范围的元素到新的位置   (niebloid)  | 
|    (C++20)  | 
  将一个给定值复制赋值给一个范围内的每个元素   (niebloid)  | 
|    (C++20)  | 
  将一个值复制赋值给一定量的元素  (niebloid)  | 
|    (C++20)  | 
  将一个函数应用于某一范围的各个元素   (niebloid)  | 
|    (C++20)  | 
  保存函数结果到一个范围中  (niebloid)  | 
|    (C++20)  | 
  保存 N 次函数应用的结果  (niebloid)  | 
|    (C++20)(C++20)  | 
  移除满足特定判别标准的元素  (niebloid)  | 
|    (C++20)(C++20)  | 
  复制一个范围的元素,忽略满足特定判别标准的元素   (niebloid)  | 
|    (C++20)(C++20)  | 
  将所有满足特定判别标准的值替换为另一个值   (niebloid)  | 
|    (C++20)(C++20)  | 
  复制一个范围内的元素,并将满足特定判别标准的元素替换为另一个值  (niebloid)  | 
|    (C++20)  | 
  交换两个范围的元素   (niebloid)  | 
|    (C++20)  | 
  逆转范围中的元素顺序  (niebloid)  | 
|    (C++20)  | 
  创建一个范围的逆向副本   (niebloid)  | 
|    (C++20)  | 
  旋转范围中的元素顺序  (niebloid)  | 
|    (C++20)  | 
  复制并旋转元素范围  (niebloid)  | 
|    (C++20)  | 
  随机重排范围中的元素  (niebloid)  | 
|    (C++20)  | 
   从序列中随机选择 n 个元素  (niebloid)  | 
|    (C++20)  | 
  移除范围中的连续重复元素  (niebloid)  | 
|    (C++20)  | 
  创建某范围的不含连续重复元素的副本  (niebloid)  | 
 划分操作 | |
|    (C++20)  | 
  判断范围是否已按给定的谓词划分   (niebloid)  | 
|    (C++20)  | 
  将范围中的元素分为二组  (niebloid)  | 
|    (C++20)  | 
  复制一个范围,将各元素分为二组  (niebloid)  | 
|    (C++20)  | 
  将元素分成二组,同时保持其相对顺序  (niebloid)  | 
|    (C++20)  | 
  定位已划分范围的划分点  (niebloid)  | 
 排序操作 | |
|    (C++20)  | 
  检查范围是否以升序排序  (niebloid)  | 
|    (C++20)  | 
  寻找最大的已排序子范围  (niebloid)  | 
|    (C++20)  | 
  将范围按升序排序   (niebloid)  | 
|    (C++20)  | 
  排序一个范围的前 N 个元素  (niebloid)  | 
|    (C++20)  | 
  对范围内的元素进行复制并部分排序   (niebloid)  | 
|    (C++20)  | 
  将范围内的元素排序,同时保持相等的元素之间的顺序   (niebloid)  | 
|    (C++20)  | 
  将给定的范围部分排序,确保其按给定元素划分   (niebloid)  | 
 二分搜索操作(在已排序范围上) | |
|    (C++20)  | 
  返回指向首个不小于给定值的元素的迭代器  (niebloid)  | 
|    (C++20)  | 
  返回指向首个大于某值的元素的迭代器  (niebloid)  | 
|    (C++20)  | 
  确定元素是否存在于某范围中  (niebloid)  | 
|    (C++20)  | 
  返回匹配特定值的元素范围   (niebloid)  | 
 集合操作(在已排序范围上) | |
|    (C++20)  | 
  归并二个已排序范围  (niebloid)  | 
|    (C++20)  | 
  在原位归并两个有序范围  (niebloid)  | 
|    (C++20)  | 
  若一个序列是另一个的子列则返回 true (niebloid)  | 
|    (C++20)  | 
  计算两个集合的差集   (niebloid)  | 
|    (C++20)  | 
  计算两个集合的交集   (niebloid)  | 
|   计算两个集合的对称差   (niebloid)  | |
|    (C++20)  | 
  计算两个集合的并集   (niebloid)  | 
 堆操作 | |
|    (C++20)  | 
  检查给定范围是否为最大堆  (niebloid)  | 
|    (C++20)  | 
  寻找能成为最大堆的最大子范围  (niebloid)  | 
|    (C++20)  | 
  从一个元素范围创建出一个最大堆   (niebloid)  | 
|    (C++20)  | 
  将一个元素加入到一个最大堆   (niebloid)  | 
|    (C++20)  | 
  从最大堆中移除最大元素   (niebloid)  | 
|    (C++20)  | 
  将一个最大堆变成一个按升序排序的元素范围   (niebloid)  | 
 最小/最大操作 | |
|    (C++20)  | 
  返回给定值的较大者  (niebloid)  | 
|    (C++20)  | 
  返回范围中的最大元素  (niebloid)  | 
|    (C++20)  | 
  返回给定值的较小者  (niebloid)  | 
|    (C++20)  | 
  返回范围中的最小元素  (niebloid)  | 
|    (C++20)  | 
  返回两个元素的较小和较大者  (niebloid)  | 
|    (C++20)  | 
  返回范围中的最小和最大元素  (niebloid)  | 
|    (C++20)  | 
   在一对边界值间夹一个值  (niebloid)  | 
 排列操作 | |
|    (C++20)  | 
  确定一个序列是否为另一序列的重排  (niebloid)  | 
|    (C++20)  | 
  产生某个元素范围的按字典序下一个较大的排列   (niebloid)  | 
|    (C++20)  | 
  产生某个元素范围的按字典序下一个较小的排列  (niebloid)  | 
受约束的未初始化内存算法
|   定义于头文件  
<memory>  | |
|   定义于命名空间  
std::ranges | |
|    (C++20)  | 
  复制元素范围到未初始化的内存区域  (niebloid)  | 
|    (C++20)  | 
  复制一定量元素到未初始化的内存区域  (niebloid)  | 
|    (C++20)  | 
  复制一个对象到范围所定义的未初始化的内存区域  (niebloid)  | 
|    (C++20)  | 
  复制一个对象到起始与计数所定义的未初始化的内存区域  (niebloid)  | 
|    (C++20)  | 
  移动对象范围到未初始化的内存区域  (niebloid)  | 
|    (C++20)  | 
  移动一定量对象到未初始化的内存区域  (niebloid)  | 
|   在范围所定义的未初始化的内存区域以默认初始化构造对象  (niebloid)  | |
|   在起始与计数所定义的未初始化的内存区域以默认初始化构造对象  (niebloid)  | |
|   在范围所定义的未初始化的内存区域以值初始化构造对象  (niebloid)  | |
|   在起始与计数所定义的未初始化的内存区域以值初始化构造对象  (niebloid)  | |
|    (C++20)  | 
  销毁范围中的元素  (niebloid)  | 
|    (C++20)  | 
  销毁范围中一定量的元素  (niebloid)  | 
|    (C++20)  | 
  销毁位于给定地址的元素  (niebloid)  | 
|    (C++20)  | 
   在给定地址创建对象   (niebloid)  |