Extensions for ranges
From cppreference.net
<
cpp
|
experimental
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
需满足严格弱序关系
(概念) |
|
随机数生成器概念 |
|
|
定义于头文件
<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
|
|
|
指定某个类型为标签说明符
(概念) |
|
|
指定某个类型表示标签说明符及其元素类型
(concept) |
|
|
为元组式类型添加命名访问器
(类模板) |
|
|
用于带标签的
std::pair
的别名模板
(别名模板) |
|
用于创建
tagged_pair
的便捷函数
(函数模板) |
|
|
定义于头文件
<experimental/ranges/tuple>
|
|
|
带标签的
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
的输出迭代器
(类模板) |
|
范围
|
定义于头文件
<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
|
|
|
判断一个序列是否是另一个序列的排列
(函数模板) |
|
|
生成元素范围的下一个更大字典序排列
(函数模板) |
|
|
生成元素范围的下一个较小字典序排列
(函数模板) |
|