Ranges 扩展
来自 cppreference.cn
C++ Ranges 扩展,ISO/IEC TS 21425:2017,指定了对核心语言的一项修改,并定义了本页列出的 C++ 标准库新组件。
Ranges TS 基于经 Concepts TS 修改的 C++14 标准。
目录 |
[编辑] 核心语言更改
Ranges TS 修改了 基于 range 的 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 | |
指定类型是标签指定符 (概念) | |
指定类型表示标签指定符及其元素类型 (概念) | |
使用命名访问器增强类元组类型 (类模板) | |
带标签的 std::pair 的别名模板 (别名模板) | |
用于创建 tagged_pair 的便捷函数(函数模板) | |
定义于头文件
<experimental/ranges/tuple> | |
带标签的 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的输出迭代器 (类模板) |
[编辑] 范围(Ranges)
定义于头文件
<experimental/ranges/range> | |
范围概念 (Range concepts) | |
指定类型为范围,即它提供 begin 迭代器和 end 哨兵(概念) | |
指定范围在常数时间内知道其大小 (概念) | |
指定范围是视图,即它具有常数时间复制/移动/赋值 (概念) | |
指定范围具有相同的迭代器和哨兵类型 (概念) | |
指定迭代器类型满足 InputIterator 的范围(概念) | |
指定迭代器类型满足 OutputIterator 的范围(概念) | |
指定迭代器类型满足 ForwardIterator 的范围(概念) | |
指定迭代器类型满足 BidirectionalIterator 的范围(概念) | |
指定迭代器类型满足 RandomAccessIterator 的范围(概念) | |
范围访问 | |
定义于命名空间
std::experimental::ranges | |
返回指向范围开头的迭代器 (自定义点对象) | |
返回范围末尾的迭代器 (自定义点对象) | |
返回指向范围的反向迭代器 (自定义点对象) | |
返回指向范围的反向结束迭代器 (自定义点对象) | |
范围原语 (Range primitives) | |
定义于命名空间
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 | |
确定一个序列是否是另一个序列的排列 (函数模板) | |
生成元素范围的下一个更大的字典序排列 (函数模板) | |
生成元素范围的下一个更小的字典序排列 (函数模板) |