范围扩展

C++ 范围扩展 (Extensions for Ranges) , ISO/IEC TS 21425:2017 指定对核心语言的一个修改,并为 C++ 标准库定义列于此页面的新组件。

范围 TS 基于概念 TS 所修改的 C++14 标准。

核心语言更改

范围 TS 修改基于范围的 for 循环规定,以容许不同类型的 begin 和 end 迭代器。此更改容许使用哨位,并且已存在于 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
检查一个类型的对象是否能与相同或不同类型的对象交换
(类模板)
确定类型集合的公共引用类型
(类模板)
确定类型集合的公共类型
(类模板)
有标签的 pair 与 tuple
定义于头文件 <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
(概念)
指定范围的迭代器满足 RandomAccessIterator
(概念)
范围访问
定义于命名空间 std::experimental::ranges
返回指向范围起始的迭代器
(定制点对象)
返回指向范围末尾的迭代器
(定制点对象)
获得指向范围的逆向迭代器
(定制点对象)
获得指向范围的逆向尾迭代器
(定制点对象)
范围原语
定义于命名空间 std::experimental::ranges
获得能在常数时间计算大小的范围的大小
(定制点对象)
检查范围是否为空
(定制点对象)
获得指向连续范围起始的指针
(定制点对象)
获得范围的迭代器类型与哨位类型
(别名模板)

算法

定义于头文件 <experimental/ranges/algorithm>
不修改序列的操作
定义于命名空间 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
判断一个序列是否为另一个序列的排列
(函数模板)
产生某个元素范围的按字典顺序的下一个较大的排列
(函数模板)
产生某个元素范围的按字典顺序的下一个较小的排列
(函数模板)