范围扩展
来自 cppreference.com
< cpp | experimental
C++ 范围扩展,ISO/IEC TS 21425:2017,指定了对核心语言的一种修改,并定义了本页列出的 C++ 标准库的新组件。
范围 TS 基于 C++14 标准,并由 概念 TS 修改。
内容 |
[编辑] 核心语言更改
范围 TS 修改了 基于范围的 for 循环 的规范,允许使用不同类型的开始和结束迭代器。此更改允许使用哨兵,并且也存在于 C++17 中。
[编辑] 概念
核心语言概念 | |
定义在头文件
<experimental/ranges/concepts> 中 | |
定义在命名空间
std::experimental::ranges 中 | |
指定类型与另一种类型相同 (概念) | |
指定类型是从另一种类型派生的 (概念) | |
指定类型可以隐式转换为另一种类型 (概念) | |
指定两种类型共享一个通用引用类型 (概念) | |
指定两种类型共享一个通用类型 (概念) | |
指定类型是整型 (概念) | |
指定类型是带符号的整型 (概念) | |
指定类型是无符号的整型 (概念) | |
指定类型可以从另一种类型赋值 (概念) | |
指定类型可以被交换,或者两种类型可以互相交换 (概念) | |
比较概念 | |
定义在头文件
<experimental/ranges/concepts> 中 | |
定义在命名空间
std::experimental::ranges 中 | |
指定类型可以在布尔上下文中使用 (概念) | |
指定两种类型可以使用运算符 == 和 != 比较相等性 (概念) | |
指定运算符 == 是等价关系 (概念) | |
指定类型上的比较运算符产生全序 (概念) | |
对象概念 | |
定义在头文件
<experimental/ranges/concepts> 中 | |
定义在命名空间
std::experimental::ranges 中 | |
指定类型对象可以被销毁 (概念) | |
指定类型变量可以从一组参数类型构造或绑定 (概念) | |
指定类型对象可以进行默认构造 (概念) | |
指定类型对象可以进行移动构造 (概念) | |
指定类型对象可以进行复制构造和移动构造 (概念) | |
指定类型对象可以进行移动和交换 (概念) | |
指定类型对象可以进行复制、移动和交换 (概念) | |
指定类型对象可以进行复制、移动、交换和默认构造 (概念) | |
指定类型是正则的,也就是说,它同时是 Semiregular 和 EqualityComparable (概念) | |
可调用概念 | |
定义在头文件
<experimental/ranges/concepts> 中 | |
定义在命名空间
std::experimental::ranges 中 | |
指定可调用类型可以用一组给定的参数类型进行调用 (概念) | |
指定可调用类型是一个布尔谓词 (概念) | |
指定可调用类型是一个二元关系 (概念) | |
指定 Relation 施加一个严格弱序(概念) | |
随机数生成器概念 | |
在头文件
<experimental/ranges/random> 中定义 | |
定义在命名空间
std::experimental::ranges 中 | |
指定类型符合均匀随机数生成器的条件 (概念) |
[编辑] 通用实用程序
实用程序组件 | |
在头文件
<experimental/ranges/utility> 中定义 | |
定义在命名空间
std::experimental::ranges 中 | |
交换两个对象的的值 (定制点对象) | |
用新值替换参数并返回其先前值 (函数模板) | |
函数对象 | |
在头文件
<experimental/ranges/functional> 中定义 | |
定义在命名空间
std::experimental::ranges 中 | |
用给定参数调用 Callable 对象 (函数模板) | |
实现 x == y 的函数对象 (类模板) | |
实现 x != y 的函数对象 (类模板) | |
实现 x > y 的函数对象 (类模板) | |
实现 x < y 的函数对象 (类模板) | |
实现 x >= y 的函数对象 (类模板) | |
实现 x <= y 的函数对象 (类模板) | |
返回其参数不变的函数对象 (类) | |
元编程和类型特征 | |
在头文件
<experimental/ranges/type_traits> 中定义 | |
定义在命名空间
std::experimental::ranges 中 | |
检查类型对象是否可以与相同或不同类型的对象交换 (类模板) | |
确定一组类型的通用引用类型 (类模板) | |
确定一组类型的通用类型 (类模板) | |
标记的配对和元组 | |
在头文件
<experimental/ranges/utility> 中定义 | |
定义在命名空间
std::experimental::ranges 中 | |
指定类型是标记说明符 (概念) | |
指定类型表示标记说明符及其元素类型 (概念) | |
用命名访问器增强元组类类型 (类模板) | |
标记 std::pair 的别名模板 (别名模板) | |
创建 tagged_pair 的便利函数(函数模板) | |
在头文件
<experimental/ranges/tuple> 中定义 | |
标记 std::tuple 的别名模板 (别名模板) | |
创建 tagged_tuple 的便利函数(函数模板) | |
在头文件
<experimental/ranges/algorithm> 中定义 | |
在命名空间
std::experimental::ranges::tag 中定义 | |
用于 ranges::tagged 的标记说明符 (类) |
[编辑] 迭代器
定义于头文件
<experimental/ranges/iterator> 中 | |
| |
定义在命名空间
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 中定义 | |
为范围 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 的范围(概念) | |
指定一个其迭代器类型满足BidirectionalIterator 的范围。(概念) | |
随机访问范围 | |
定义在命名空间
std::experimental::ranges 中 | |
(概念) 范围访问 | |
返回一个指向范围开头的迭代器。 (定制点对象) | |
返回一个指向范围结尾的迭代器。 (定制点对象) | |
返回一个指向范围的反向迭代器。 (定制点对象) | |
rendcrend | |
定义在命名空间
std::experimental::ranges 中 | |
(定制点对象) 范围基本操作 | |
获取一个可以以常数时间计算大小的范围的大小。 (定制点对象) | |
检查一个范围是否为空。 (定制点对象) | |
获取一个指向连续范围开头的指针。 (定制点对象) |
iterator_tsentinel_t
在头文件
<experimental/ranges/algorithm> 中定义 | |
获取范围的迭代器和哨兵类型。 | |
定义在命名空间
std::experimental::ranges 中 | |
[编辑] 算法 非修改序列操作 | |
检查一个谓词对范围中所有元素、任何元素或没有元素是否为true。 (函数模板) | |
对一个范围内的元素应用一个函数。 (函数模板) | |
返回满足特定条件的元素数量。 (函数模板) | |
查找两个范围不同的第一个位置。 (函数模板) | |
确定两组元素是否相同。 (函数模板) | |
如果一个范围字典序小于另一个范围,则返回true。 (函数模板) | |
查找第一个满足特定条件的元素。 (函数模板) | |
在一个特定范围内查找元素的最后一个序列。 (函数模板) | |
搜索一组元素中的任何一个。 (函数模板) | |
查找第一个相等的两个相邻项(或满足给定谓词)。 (函数模板) | |
搜索一个范围内的元素。 (函数模板) | |
search_n | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 修改序列操作 | |
将一个范围内的元素复制到新位置。 (函数模板) | |
将一定数量的元素复制到新位置。 (函数模板) | |
以反向顺序复制一个范围内的元素。 (函数模板) | |
将一个范围内的元素移动到新位置。 (函数模板) | |
以反向顺序将一个范围内的元素移动到新位置。 (函数模板) | |
将一个范围内的元素分配一个特定值。 (函数模板) | |
检查一个谓词对范围中所有元素、任何元素或没有元素是否为true。 将一个值分配给一定数量的元素。 | |
transform (函数模板) | |
将一个函数的结果保存在一个范围内。 (函数模板) | |
保存一个函数的 N 次应用的结果。 (函数模板) | |
删除满足特定条件的元素。 (函数模板) | |
复制一个范围内的元素,省略满足特定条件的元素。 (函数模板) | |
用另一个值替换所有满足特定条件的值。 (函数模板) | |
复制一个范围,用另一个值替换满足特定条件的元素。 (函数模板) | |
交换两个范围内的元素。 (函数模板) | |
反转一个范围内的元素顺序。 (函数模板) | |
创建一个反转的范围副本。 (函数模板) | |
旋转一个范围内的元素顺序。 (函数模板) | |
将一个范围内的元素旋转复制到另一个范围 (函数模板) | |
随机重新排序范围内的元素 (函数模板) | |
移除范围中连续的重复元素 (函数模板) | |
唯一化复制 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 划分操作 | |
确定范围是否被给定谓词划分 (函数模板) | |
将元素范围划分为两组 (函数模板) | |
复制范围,并将元素划分为两组 (函数模板) | |
将元素划分为两组,同时保留它们的相对顺序 (函数模板) | |
划分点 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 排序操作 | |
检查范围是否按升序排序 (函数模板) | |
查找最大的排序子范围 (函数模板) | |
将范围按升序排序 (函数模板) | |
对范围的前 N 个元素进行排序 (函数模板) | |
复制并部分排序元素范围 (函数模板) | |
对元素范围进行排序,同时保留相等元素之间的顺序 (函数模板) | |
第 N 个元素 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 二分查找操作(在排序的范围内) | |
返回指向第一个不小于给定值的元素的迭代器 (函数模板) | |
返回指向第一个大于某个值的元素的迭代器 (函数模板) | |
确定某个范围中是否存在元素 (函数模板) | |
等值范围 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 集合操作(在排序的范围内) | |
合并两个排序的范围 (函数模板) | |
就地合并两个有序范围 (函数模板) | |
如果一个集合是另一个集合的子集,则返回 true (函数模板) | |
计算两个集合的差集 (函数模板) | |
计算两个集合的交集 (函数模板) | |
计算两个集合的对称差集 (函数模板) | |
集合并集 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 堆操作 | |
检查给定范围是否为最大堆 (函数模板) | |
查找最大的最大堆子范围 (函数模板) | |
从元素范围创建最大堆 (函数模板) | |
将元素添加到最大堆 (函数模板) | |
从最大堆中移除最大元素 (函数模板) | |
堆排序 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) 最小/最大操作 | |
返回给定值中较大的一个 (函数模板) | |
返回范围内的最大元素 (函数模板) | |
返回给定值中较小的一个 (函数模板) | |
返回范围内的最小元素 (函数模板) | |
返回两个元素中较小的和较大的值 (函数模板) | |
最小最大元素 | |
定义在命名空间
std::experimental::ranges 中 | |
(函数模板) (函数模板) | |
生成一个元素范围的下一个更大字典序排列 (函数模板) | |
生成一个元素范围的下一个更小字典序排列 (函数模板) |