Namespaces
Variants

Extensions for ranges

From cppreference.net

C++范围扩展技术规范(ISO/IEC TS 21425:2017)对核心语言进行了一项修改,并定义了本页所列的C++标准库新组件。

Ranges TS基于C++14标准,并经过 Concepts TS 的修改。

目录

核心语言变更

Ranges TS 修改了 基于范围的 for 循环 的规范,允许使用不同类型的起始和结束迭代器。这一变更支持了哨兵的使用,该特性同样存在于 C++17 标准中。

概念

核心语言概念
定义于 命名空间 std::experimental::ranges
指定一个类型与另一个类型相同
(概念)
指定一个类型派生自另一个类型
(concept)
规定一个类型可隐式转换为另一个类型
(概念)
指定两种类型共享一个公共引用类型
(概念)
指定两种类型共享一个公共类型
(概念)
指定类型为整型
(概念)
指定类型为有符号整型
(概念)
指定类型为无符号整型
(概念)
指定一个类型可从另一类型赋值
(concept)
指定类型可交换或两种类型可相互交换
(concept)
比较概念
定义于 命名空间 std::experimental::ranges
规定类型可用于布尔上下文
(概念)
指定两种类型可通过运算符 == ! = 进行相等性比较
(概念)
规定运算符 == 为等价关系
(概念)
规定该类型上的比较运算符产生全序关系
(概念)
对象概念
定义于 命名空间 std::experimental::ranges
指定该类型的对象可以被销毁
(concept)
指定该类型的变量可以从一组参数类型构造或绑定
(概念)
指定该类型的对象可被默认构造
(概念)
规定某类型的对象可被移动构造
(概念)
规定一个类型的对象可以被复制构造和移动构造
(概念)
规定该类型的对象可被移动和交换
(概念)
规定某个类型的对象可以被复制、移动和交换
(概念)
规定某类型的对象可被复制、移动、交换及默认构造
(概念)
规定类型是正则的,即它同时满足 Semiregular EqualityComparable
(概念)
可调用概念
定义于 命名空间 std::experimental::ranges
规定可调用类型可以用给定的一组参数类型进行调用
(概念)
规定可调用类型为布尔谓词
(concept)
规定可调用类型为二元关系
(concept)
规定某个 Relation 需满足严格弱序关系
(概念)
随机数生成器概念
定义于 命名空间 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
指定某个类型为标签说明符
(概念)
指定某个类型表示标签说明符及其元素类型
(concept)
为元组式类型添加命名访问器
(类模板)
用于带标签的 std::pair 的别名模板
(别名模板)
用于创建 tagged_pair 的便捷函数
(函数模板)
带标签的 std::tuple 别名模板
(别名模板)
用于创建 tagged_tuple 的便捷函数
(函数模板)
定义于 命名空间 std::experimental::ranges::tag
用于 ranges::tagged 的标签说明符
(类)

迭代器

迭代器相关概念
定义于 命名空间 std::experimental::ranges
迭代器概念
规定通过应用运算符 * 可读取的类型
(概念)
规定可向迭代器所引用对象写入值
(概念)
规定一个 Semiregular 类型可通过前置和后置递增运算符进行自增操作
(概念)
规定对 WeaklyIncrementable 类型的递增操作是保等性的,且该类型是 EqualityComparable
(概念)
规定某类型的对象可被递增和解引用
(concept)
指明某类型的对象是 Iterator 类型的哨兵
(概念)
规定可以对迭代器和哨位应用 - 运算符,以在常数时间内计算它们的差值
(概念)
指定某个类型为输入迭代器,即其引用值可被读取且支持前置与后置递增操作
(concept)
规定某个类型是给定值类型的输出迭代器,即可以向该类型写入对应值类型的数值,且支持前置与后置递增操作
(概念)
规定一个 InputIterator 为前向迭代器,支持相等比较和多轮遍历
(概念)
指定 ForwardIterator 为双向迭代器,支持向后移动
(概念)
规定一个 BidirectionalIterator 为随机访问迭代器,支持常数时间内的前进操作与下标访问
(概念)
间接可调用概念
规定可调用类型可通过解引用 Readable 类型的结果进行调用
(概念)
规定当可调用对象通过解引用 Readable 类型的结果调用时,满足 Predicate
(概念)
规定当某个可调用对象通过解引用若干 Readable 类型的结果调用时,满足 Relation
(概念)
规定当可调用对象通过解引用某些 Readable 类型的结果调用时,满足 StrictWeakOrder
(概念)
通用算法要求
规定值可以从 Readable 类型移动至 Writable 类型
(概念)
规定值可以从 Readable 类型移动至 Writable 类型,且该移动操作可通过中间对象执行
(概念)
规定值可以从 Readable 类型复制到 Writable 类型
(概念)
规定值可以从 Readable 类型复制到 Writable 类型,且该复制可通过中间对象执行
(概念)
规定两个 Readable 类型所引用的值可被交换
(概念)
规定两个 Readable 类型所引用的值可以进行相互比较
(概念)
指定原地重排元素的算法的通用要求
(concept)
规定通过复制元素将已排序序列合并到输出序列的算法的要求
(概念)
规定将序列排列为有序序列的算法的通用要求
(概念)
概念工具集
计算在解引用一组 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 的输出迭代器
(类模板)

范围

范围概念
规定类型为范围,即提供 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
判断一个序列是否是另一个序列的排列
(函数模板)
生成元素范围的下一个更大字典序排列
(函数模板)
生成元素范围的下一个较小字典序排列
(函数模板)