命名空间
变体
操作

范围扩展

来自 cppreference.com

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
指定类型对象可以被销毁
(概念) [编辑]
指定类型变量可以从一组参数类型构造或绑定
(概念) [编辑]
指定类型对象可以进行默认构造
(概念) [编辑]
指定类型对象可以进行移动构造
(概念) [编辑]
指定类型对象可以进行复制构造和移动构造
(概念) [编辑]
指定类型对象可以进行移动和交换
(概念) [编辑]
指定类型对象可以进行复制、移动和交换
(概念) [编辑]
指定类型对象可以进行复制、移动、交换和默认构造
(概念) [编辑]
指定类型是正则的,也就是说,它同时是 SemiregularEqualityComparable
(概念) [编辑]
可调用概念
定义在头文件 <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
(函数模板) [编辑]
(函数模板) [编辑]
生成一个元素范围的下一个更大字典序排列
(函数模板) [编辑]
生成一个元素范围的下一个更小字典序排列
(函数模板) [编辑]