命名空间
变体
操作

ranges 扩展

来自 cppreference.cn

C++ Ranges 扩展,ISO/IEC TS 21425:2017,指定了对核心语言的一项修改,并为本页列出的 C++ 标准库定义了新的组件。

Ranges TS 基于 C++14 标准,并由概念 TS修改。

目录

[编辑] 核心语言变更

Ranges TS 修改了基于范围的 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
指定一个类型是一个标签指定符
(概念) [编辑]
指定一个类型表示一个标签指定符及其元素类型
(概念) [编辑]
使用具名访问器增强类元组类型
(类模板) [编辑]
tagged std::pair 的别名模板
(别名模板)[编辑]
用于创建 tagged_pair 的便利函数
(函数模板) [编辑]
定义于头文件 <experimental/ranges/tuple>
tagged 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 的输出迭代器
(类模板) [编辑]

[编辑] 范围

定义于头文件 <experimental/ranges/range>
范围概念
指定类型为范围,即它提供 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
确定一个序列是否是另一个序列的排列
(函数模板) [编辑]
生成元素范围的下一个更大的字典序排列
(函数模板) [编辑]
生成元素范围的下一个更小的字典序排列
(函数模板) [编辑]