命名空间
变体
操作

Ranges 扩展

来自 cppreference.cn
< cpp‎ | 实验性

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
确定一个序列是否是另一个序列的排列
(函数模板) [编辑]
生成元素范围的下一个更大的字典序排列
(函数模板) [编辑]
生成元素范围的下一个更小的字典序排列
(函数模板) [编辑]