范围扩展

来自cppreference.com

C++ 范围扩展 (Extensions for Ranges) , ISO/IEC TS 21425:2017 指定对核心语言的一个修改,并为 C++ 标准库定义列于此页面的新组件。

范围 TS 基于概念 TS 所修改的 C++14 标准。

目录

[编辑] 核心语言更改

范围 TS 修改基于范围的 for 循环规定,以容许不同类型的 begin 和 end 迭代器。此更改容许使用哨位,并且已存在于 C++17 。

[编辑] 概念

核心语言概念
定义于头文件 <experimental/ranges/concepts>
定义于命名空间 std::experimental::ranges
指定类型与另一类型相同
(概念) [编辑]
指定该类型导出自另一类型
(概念) [编辑]
指定类型能隐式转换成另一类型
(概念) [编辑]
指定二个类型共享共用引用类型
(概念) [编辑]
指定二个类型共享共用类型
(概念) [编辑]
指定类型为整数类型
(概念) [编辑]
指定类型为有符号整数类型
(概念) [编辑]
指定类型为无符号整数类型
(概念) [编辑]
指定类型可从另一类型赋值
(概念) [编辑]
指定类型能交换,或二个类型能彼此交换
(概念) [编辑]
比较概念
定义于头文件 <experimental/ranges/concepts>
定义于命名空间 std::experimental::ranges
指定类型能用于布尔语境
(概念) [编辑]
指定二个类型能用运算符 ==!= 比较相等
(概念) [编辑]
指定运算符 == 是等价关系
(概念) [编辑]
指定该类型上的比较运算符产出全序
(概念) [编辑]
对象概念
定义于头文件 <experimental/ranges/concepts>
定义于命名空间 std::experimental::ranges
指定该类型对象能被销毁,且能用一元 & 取其地址
(概念) [编辑]
指定该类型变量能从实参类型集构造或绑定到它们
(概念) [编辑]
指定该类型对象能默认构造
(概念) [编辑]
指定类型的对象能移动构造
(概念) [编辑]
指定类型对象能复制构造及移动构造
(概念) [编辑]
指定类型对象能被移动和交换
(概念) [编辑]
指定该类型对象能被复制、移动和交换
(概念) [编辑]
指定类型的对象能被复制、移动、交换及默认构造
(概念) [编辑]
指定类型为常规,即半常规 (Semiregular) 且可比较相等 (EqualityComparable)
(概念) [编辑]
可调用概念
定义于头文件 <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
检查一个类型的对象是否能与相同或不同类型的对象交换
(类模板) [编辑]
确定类型集合的共用引用类型
(类模板) [编辑]
确定类型集合的共用类型
(类模板) [编辑]
有标签的 pair 与 tuple
定义于头文件 <experimental/ranges/utility>
定义于命名空间 std::experimental::ranges
指定类型为标签指定符
(概念) [编辑]
指定类型表示标签指定符及其元素类型
(概念) [编辑]
将具名访问器增加到仿 tuple 类型
(类模板) [编辑]
有标签 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
迭代器概念
指定类型通过应用运算符 * 可读
(概念) [编辑]
指定值能被写入迭代器所引用的对象
(概念) [编辑]
指定类型能以前后自增运算符自增
(概念) [编辑]
指定可弱自增 (WeaklyIncrementable) 类型上的自增操作保持相等性,而且该类型可比较相等 (EqualityComparable)
(概念) [编辑]
指定该类型对象能自增并解引用
(概念) [编辑]
指定类型的对象是对于迭代器 (Iterator) 类型的哨位
(概念) [编辑]
指定能应用 - 运算符到迭代器和哨位,以在常数时间计算其差
(概念) [编辑]
指定类型为输入迭代器,即能读其所引用值,且它能前后自增
(概念) [编辑]
指定类型为给定值类型的输出迭代器,即能把该类型的值写入它,且它能前后自增
(概念) [编辑]
指定输入迭代器 (InputIterator) 为向前迭代器,支持相等比较和多趟
(概念) [编辑]
指定向前迭代器 (ForwardIterator) 为双向迭代器,支持向后移动
(概念) [编辑]
指定双向迭代器 (BidirectionalIterator) 为随机访问迭代器,支持常数时间前进和下标访问
(概念) [编辑]
间接可调用概念
指定可调用对象能以解引用一个可读 (Readable) 类型的结果调用
(概念) [编辑]
指定可调用对象,以解引用某个可读 (Readable) 类型的结果调用时,满足谓词 (Predicate)
(概念) [编辑]
指定可调用对象以解引用某些可读 (Readable) 类型的结果调用时,满足关系 (Relation)
(概念) [编辑]
指定可调用对象,以解引用某些可读 (Readable) 类型的结果调用时,满足严格弱序 (StrictWeakOrder)
(概念) [编辑]
常用算法要求
指定值可从可读 (Readable) 类型移动到可写 (Writable) 类型
(概念) [编辑]
指定类型可从可读 (Readable) 类型移动到可写 (Writable) 类型,且移动可以通过中间对象进行
(概念) [编辑]
指定值可从可读 (Readable) 类型复制到可写 (Writable) 类型
(概念) [编辑]
指定值可从可读 (Readable) 类型复制到可写 (Writable) 类型,且该复制可能通过中间对象进行
(概念) [编辑]
指定二个可读 (Readable) 类型所引用的值可交换
(概念) [编辑]
指定二个可读 (Readable) 类型所引用的值能比较
(概念) [编辑]
指定原位重排元素的算法的公共要求
(概念) [编辑]
指定算法的要求,该算法需要通过复制元素归并已排序序列到输出序列
(概念) [编辑]
指定重排元素为有序序列的算法的公共要求
(概念) [编辑]
概念工具
计算在某可读 (Readable) 类型集合的解引用结果上调用可调用对象的结果
(类模板) [编辑]
用于指定接受投影的算法上的制约的帮助模板
(类模板) [编辑]
提供提供机制,声明迭代器-哨位对不满足有大小哨位 (SizedSentinel)
(变量模板) [编辑]
迭代器原语
迭代器工具
定义于命名空间 std::experimental::ranges
转型解引用对象的结果为其所关联的右值引用类型
(定制点对象) [编辑]
交换二个可解引用对象所引用的值
(定制点对象) [编辑]
迭代器特性
定义于命名空间 std::experimental::ranges
获得可弱自增 (WeaklyIncrementable) 类型的差类型
(类模板) [编辑]
获得可读 (Readable) 类型的值类型
(类模板) [编辑]
获得输入迭代器类型的迭代器类别
(类模板) [编辑]
汇集迭代器的关联类型的兼容性特性类
(别名模板) [编辑]
获得可解引用类型的引用类型
(别名模板) [编辑]
获得可解引用对象的右值引用类型
(别名模板) [编辑]
计算可读 (Readable) 对象的引用类型和到其值类型的左值引用类型的共用引用类型
(别名模板) [编辑]
测试二个类型是否满足间接可移动 (IndirectlyMovable)
(类模板) [编辑]
测试二个类型是否满足间接可交换 (IndirectlySwappable)
(类模板) [编辑]
迭代器类别标签
定义于命名空间 std::experimental::ranges
用于指示迭代器类别的空类
(类) [编辑]
std::iterator_traits specializations
定义于命名空间 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)
(概念) [编辑]
概念工具
提供机制,声明范围不满足有大小范围 (SizedRange)
(变量模板) [编辑]
表示类是视图的空基类
(类) [编辑]
从其他范围分化视图的帮助特性
(类模板) [编辑]
范围访问
定义于命名空间 std::experimental::ranges
返回指向范围起始的迭代器
(定制点对象) [编辑]
返回指向范围末尾的迭代器
(定制点对象) [编辑]
获得指向范围的逆向迭代器
(定制点对象) [编辑]
获得指向范围的逆向尾迭代器
(定制点对象) [编辑]
范围原语
定义于命名空间 std::experimental::ranges
获得能在常数时间计算大小的范围的大小
(定制点对象) [编辑]
检查范围是否为空
(定制点对象) [编辑]
获得指向相接范围起始的指针
(定制点对象) [编辑]
获得范围的迭代器类型
(别名模板) [编辑]
获得范围的哨位类型
(别名模板) [编辑]

[编辑] 算法

定义于头文件 <experimental/ranges/algorithm>
不修改序列的操作
定义于命名空间 std::experimental::ranges
检查谓词是否对全部、任何或无元素为 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
返回给定值的较大者
(函数模板) [编辑]
返回范围中的最大元素
(函数模板) [编辑]
返回给定值的较小者
(函数模板) [编辑]
返回范围中的最小元素
(函数模板) [编辑]
返回二个元素的较小和较大者
(函数模板) [编辑]
返回范围中的最小和最大元素
(函数模板) [编辑]
若一个范围以字典序小于另一个则返回 true
(函数模板) [编辑]
确定序列是否另一序列的重排列
(函数模板) [编辑]
生成下个较大的字典序元素范围重排列
(函数模板) [编辑]
生成下个较小的元素范围字典序重排列
(函数模板) [编辑]