ranges 扩展
来自 cppreference.cn
< cpp | experimental
C++ Ranges 扩展,ISO/IEC TS 21425:2017,指定了对核心语言的一项修改,并为本页列出的 C++ 标准库定义了新的组件。
Ranges TS 基于 C++14 标准,并由概念 TS修改。
目录 |
[编辑] 核心语言变更
Ranges TS 修改了基于范围的 for 循环的规范,以允许不同类型的 begin 和 end 迭代器。此更改允许使用哨兵,并且也存在于 C++17 中。
[编辑] 概念
核心语言概念 | |
定义于命名空间
std::experimental::ranges | |
指定一个类型与另一个类型相同 (概念) | |
指定一个类型派生自另一个类型 (概念) | |
指定一个类型可以隐式转换为另一个类型 (概念) | |
指定两个类型共享一个公共引用类型 (概念) | |
指定两个类型共享一个公共类型 (概念) | |
指定一个类型是整型 (概念) | |
指定一个类型是有符号整型 (概念) | |
指定一个类型是无符号整型 (概念) | |
指定一个类型可以从另一个类型赋值 (概念) | |
指定一个类型可以被交换,或者两个类型可以相互交换 (概念) | |
比较概念 | |
定义于命名空间
std::experimental::ranges | |
指定一个类型可以用在布尔上下文中 (概念) | |
指定两个类型可以使用运算符 == 和 != 比较相等性 (概念) | |
指定运算符 == 是一个等价关系 (概念) | |
指定类型上的比较运算符产生全序关系 (概念) | |
对象概念 | |
定义于命名空间
std::experimental::ranges | |
指定该类型的对象可以被销毁 (概念) | |
指定该类型的变量可以从一组参数类型构造或绑定 (概念) | |
指定一个类型的对象可以被默认构造 (概念) | |
指定一个类型的对象可以被移动构造 (概念) | |
指定一个类型的对象可以被复制构造和移动构造 (概念) | |
指定一个类型的对象可以被移动和交换 (概念) | |
指定一个类型的对象可以被复制、移动和交换 (概念) | |
指定一个类型的对象可以被复制、移动、交换和默认构造 (概念) | |
指定一个类型是 Regular 的,即,它既是Semiregular 又是 EqualityComparable (概念) | |
可调用概念 | |
定义于命名空间
std::experimental::ranges | |
指定一个可调用类型可以使用给定的一组参数类型调用 (概念) | |
指定一个可调用类型是一个布尔谓词 (概念) | |
指定一个可调用类型是一个二元关系 (概念) | |
指定一个 Relation 施加一个严格弱序关系(概念) | |
随机数生成器概念 | |
定义于头文件
<experimental/ranges/random> | |
定义于命名空间
std::experimental::ranges | |
指定一个类型符合均匀随机数生成器的条件 (概念) |
[编辑] 通用工具
实用工具组件 | |
定义于命名空间
std::experimental::ranges | |
交换两个对象的值 (定制点对象) | |
用新值替换参数并返回其先前的值 (函数模板) | |
函数对象 | |
定义于命名空间
std::experimental::ranges | |
使用给定的参数调用一个 Callable 对象 (函数模板) | |
实现 x == y 的函数对象 (类模板) | |
实现 x != y 的函数对象 (类模板) | |
实现 x > y 的函数对象 (类模板) | |
实现 x < y 的函数对象 (类模板) | |
实现 x >= y 的函数对象 (类模板) | |
实现 x <= y 的函数对象 (类模板) | |
返回其参数不变的函数对象 (类) | |
元编程和类型特征 | |
定义于命名空间
std::experimental::ranges | |
检查一个类型的对象是否可以与相同或不同类型的对象交换 (类模板) | |
确定一组类型的公共引用类型 (类模板) | |
确定一组类型的公共类型 (类模板) | |
标记对和元组 | |
定义于命名空间
std::experimental::ranges | |
指定一个类型是一个标签指定符 (概念) | |
指定一个类型表示一个标签指定符及其元素类型 (概念) | |
使用具名访问器增强类元组类型 (类模板) | |
tagged std::pair 的别名模板 (别名模板) | |
用于创建 tagged_pair 的便利函数(函数模板) | |
定义于头文件
<experimental/ranges/tuple> | |
tagged std::tuple 的别名模板 (别名模板) | |
用于创建 tagged_tuple 的便利函数(函数模板) | |
定义于命名空间
std::experimental::ranges::tag | |
用于 ranges::tagged 的标签指定符 (类) |
[编辑] 迭代器
| |
定义于命名空间
std::experimental::ranges | |
迭代器概念 | |
指定一个类型可以通过应用运算符 * 读取(概念) | |
指定一个值可以被写入到迭代器引用的对象 (概念) | |
指定一个 Semiregular 类型可以使用前缀和后缀递增运算符递增(概念) | |
指定 WeaklyIncrementable 类型上的递增操作是保等值的,并且该类型是 EqualityComparable (概念) | |
指定一个类型的对象可以被递增和解引用 (概念) | |
指定一个类型的对象是 Iterator 类型的哨兵(概念) | |
指定 - 运算符可以应用于迭代器和哨兵,以在常数时间内计算它们的差值(概念) | |
指定一个类型是输入迭代器,即,其引用的值可以被读取,并且可以进行前缀和后缀递增 (概念) | |
指定一个类型是给定值类型的输出迭代器,即,该类型的值可以写入到其中,并且可以进行前缀和后缀递增 (概念) | |
指定一个 InputIterator 是一个前向迭代器,支持相等比较和多趟(概念) | |
指定一个 ForwardIterator 是一个双向迭代器,支持向后移动(概念) | |
指定一个 BidirectionalIterator 是一个随机访问迭代器,支持常数时间内的前进和下标(概念) | |
间接可调用概念 | |
指定一个可调用类型可以使用解引用 Readable 类型的结果调用(概念) | |
指定一个可调用对象,当使用解引用 Readable 类型的结果调用时,满足 Predicate (概念) | |
指定一个可调用对象,当使用解引用一些 Readable 类型的结果调用时,满足 Relation (概念) | |
指定一个可调用对象,当使用解引用一些 Readable 类型的结果调用时,满足 StrictWeakOrder (概念) | |
通用算法要求 | |
指定值可以从 Readable 类型移动到 Writable 类型(概念) | |
指定值可以从 Readable 类型移动到 Writable 类型,并且该移动可以通过中间对象执行(概念) | |
指定值可以从 Readable 类型复制到 Writable 类型(概念) | |
指定值可以从 Readable 类型复制到 Writable 类型,并且该复制可以通过中间对象执行(概念) | |
指定可通过两个Readable 类型引用的值可以被交换(概念) | |
指定可通过两个Readable 类型引用的值可以被比较(概念) | |
指定了就地重排元素的算法的通用要求 (概念) | |
指定了通过复制元素将已排序序列合并到输出序列的算法的要求 (概念) | |
指定了将序列置换为有序序列的算法的通用要求 (概念) | |
概念实用工具 | |
计算在解引用某些Readable 类型的结果上调用可调用对象的结果(类模板) | |
用于指定接受投影的算法的约束的辅助模板 (类模板) | |
迭代器原语 | |
迭代器实用工具 | |
定义于命名空间
std::experimental::ranges | |
将解引用对象的结果强制转换为其关联的右值引用类型 (自定义点对象) | |
交换两个可解引用对象引用的值 (自定义点对象) | |
迭代器特性 | |
定义于命名空间
std::experimental::ranges | |
获取WeaklyIncrementable 类型的差值类型(类模板) | |
获取Readable 类型的值类型(类模板) | |
获取输入迭代器类型的迭代器类别 (类模板) | |
兼容性特性类,用于收集迭代器的关联类型 (别名模板) | |
获取可解引用对象的关联引用类型 (别名模板) | |
迭代器类别标签 | |
定义于命名空间
std::experimental::ranges | |
用于指示迭代器类别的空类类型 (类) | |
std::iterator_traits 特化 | |
定义于命名空间
std | |
为 ranges TS 迭代器特化 std::iterator_traits (类模板特化) | |
迭代器操作 | |
定义于命名空间
std::experimental::ranges | |
将迭代器前进给定距离 (函数模板) | |
返回迭代器与哨兵之间,或范围的开头和结尾之间的距离 (函数模板) | |
递增迭代器 (函数模板) | |
递减迭代器 (函数模板) | |
迭代器适配器 | |
定义于命名空间
std::experimental::ranges | |
用于反向顺序遍历的迭代器适配器 (类模板) | |
用于在容器末尾插入的迭代器适配器 (类模板) | |
用于在容器前端插入的迭代器适配器 (类模板) | |
用于在容器中插入的迭代器适配器 (类模板) | |
解引用为右值引用的迭代器适配器 (类模板) | |
用于 move_iterator 的哨兵适配器(类模板) | |
将迭代器-哨兵对适配为通用迭代器类型,以便与旧算法一起使用 (类模板) | |
迭代器适配器,用于跟踪其与起始位置的距离 (类模板) | |
用于知道其范围边界的迭代器类型的空哨兵类型 (类) | |
可能悬空的迭代器的包装器 (类模板) | |
别名模板,使用 dangling 包装右值范围的迭代器类型(别名模板) | |
与任何迭代器一起使用的哨兵类型,表示无限范围 (类) | |
流迭代器 | |
定义于命名空间
std::experimental::ranges | |
从 std::basic_istream 读取的输入迭代器 (类模板) | |
写入 std::basic_ostream 的输出迭代器 (类模板) | |
从 std::basic_streambuf 读取的输入迭代器 (类模板) | |
写入 std::basic_streambuf 的输出迭代器 (类模板) |
[编辑] 范围
定义于头文件
<experimental/ranges/range> | |
范围概念 | |
指定类型为范围,即它提供 begin 迭代器和 end 哨兵(概念) | |
指定范围在常数时间内知道其大小 (概念) | |
指定范围是一个视图,即它具有常数时间的复制/移动/赋值 (概念) | |
指定范围具有相同的迭代器和哨兵类型 (概念) | |
指定迭代器类型满足 InputIterator 的范围(概念) | |
指定迭代器类型满足 OutputIterator 的范围(概念) | |
指定迭代器类型满足 ForwardIterator 的范围(概念) | |
指定迭代器类型满足 BidirectionalIterator 的范围(概念) | |
指定迭代器类型满足 RandomAccessIterator 的范围(概念) | |
范围访问 | |
定义于命名空间
std::experimental::ranges | |
返回指向范围开头的迭代器 (自定义点对象) | |
返回指向范围末尾的迭代器 (自定义点对象) | |
返回范围的反向迭代器 (自定义点对象) | |
返回范围的反向末尾迭代器 (自定义点对象) | |
范围原语 | |
定义于命名空间
std::experimental::ranges | |
获取大小可以在常数时间内计算的范围的大小 (自定义点对象) | |
检查范围是否为空 (自定义点对象) | |
获取指向连续范围开头的指针 (自定义点对象) | |
获取范围的迭代器和哨兵类型 (别名模板) |
[编辑] 算法
非修改序列操作 | |
定义于命名空间
std::experimental::ranges | |
检查谓词对于范围中的所有、任何或没有元素是否为true (函数模板) | |
将函数应用于元素范围 (函数模板) | |
返回满足特定条件的元素数量 (函数模板) | |
查找两个范围不同的第一个位置 (函数模板) | |
确定两组元素是否相同 (函数模板) | |
如果一个范围在字典序上小于另一个范围,则返回true (函数模板) | |
查找满足特定条件的第一个元素 (函数模板) | |
在某个范围内查找元素的最后一个序列 (函数模板) | |
搜索元素集合中的任何一个 (函数模板) | |
查找第一个相等的相邻项(或满足给定谓词的相邻项) (函数模板) | |
搜索元素范围 (函数模板) | |
在范围内搜索元素的多个连续副本 (函数模板) | |
修改序列操作 | |
定义于命名空间
std::experimental::ranges | |
将元素范围复制到新位置 (函数模板) | |
将一定数量的元素复制到新位置 (函数模板) | |
以向后顺序复制元素范围 (函数模板) | |
将元素范围移动到新位置 (函数模板) | |
以向后顺序将元素范围移动到新位置 (函数模板) | |
为元素范围赋值 (函数模板) | |
为一定数量的元素赋值 (函数模板) | |
将函数应用于元素范围 (函数模板) | |
将函数的结果保存在范围中 (函数模板) | |
保存函数 N 次应用的结果 (函数模板) | |
移除满足特定条件的元素 (函数模板) | |
复制元素范围,省略满足特定条件的元素 (函数模板) | |
将所有满足特定条件的值替换为另一个值 (函数模板) | |
复制范围,将满足特定条件的元素替换为另一个值 (函数模板) | |
交换两个元素范围 (函数模板) | |
反转范围中元素的顺序 (函数模板) | |
创建反转的范围的副本 (函数模板) | |
旋转范围中元素的顺序 (函数模板) | |
复制并旋转元素范围 (函数模板) | |
随机重排范围中的元素 (函数模板) | |
移除范围中连续重复的元素 (函数模板) | |
创建某个元素范围的副本,其中不包含连续的重复项 (函数模板) | |
划分操作 | |
定义于命名空间
std::experimental::ranges | |
确定范围是否按给定谓词划分 (函数模板) | |
将元素范围划分为两组 (函数模板) | |
复制范围,将元素划分为两组 (函数模板) | |
将元素划分为两组,同时保留其相对顺序 (函数模板) | |
定位已划分范围的划分点 (函数模板) | |
排序操作 | |
定义于命名空间
std::experimental::ranges | |
检查范围是否已排序为升序 (函数模板) | |
查找最大的已排序子范围 (函数模板) | |
将范围排序为升序 (函数模板) | |
对范围的前 N 个元素进行排序 (函数模板) | |
复制并部分排序元素范围 (函数模板) | |
对元素范围进行排序,同时保留相等元素之间的顺序 (函数模板) | |
部分排序给定范围,确保它按给定元素划分 (函数模板) | |
二分搜索操作(在已排序范围上) | |
定义于命名空间
std::experimental::ranges | |
返回指向第一个不小于给定值的元素的迭代器 (函数模板) | |
返回指向第一个大于某个值的元素的迭代器 (函数模板) | |
确定某个元素是否存在于某个范围内 (函数模板) | |
返回与特定键匹配的元素范围 (函数模板) | |
集合操作(在已排序范围上) | |
定义于命名空间
std::experimental::ranges | |
合并两个已排序范围 (函数模板) | |
原地归并两个有序范围 (函数模板) | |
如果一个集合是另一个集合的子集,则返回 true (函数模板) | |
计算两个集合的差集 (函数模板) | |
计算两个集合的交集 (函数模板) | |
计算两个集合的对称差集 (函数模板) | |
计算两个集合的并集 (函数模板) | |
堆操作 | |
定义于命名空间
std::experimental::ranges | |
检查给定范围是否为最大堆 (函数模板) | |
查找作为最大堆的最大子范围 (函数模板) | |
从元素范围创建最大堆 (函数模板) | |
向最大堆添加元素 (函数模板) | |
从最大堆中移除最大元素 (函数模板) | |
将最大堆转换为按升序排序的元素范围 (函数模板) | |
最小值/最大值操作 | |
定义于命名空间
std::experimental::ranges | |
返回给定值中较大的值 (函数模板) | |
返回范围中最大的元素 (函数模板) | |
返回给定值中较小的值 (函数模板) | |
返回范围中最小的元素 (函数模板) | |
返回两个元素中较小和较大的值 (函数模板) | |
返回范围中最小和最大的元素 (函数模板) | |
排列操作 | |
定义于命名空间
std::experimental::ranges | |
确定一个序列是否是另一个序列的排列 (函数模板) | |
生成元素范围的下一个更大的字典序排列 (函数模板) | |
生成元素范围的下一个更小的字典序排列 (函数模板) |