C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 并行扩展
- 并行扩展,版本 2
- std::experimental::sample
- std::experimental::to_array
- std::experimental::source_location
- std::experimental::not_fn
- std::experimental::future
- std::experimental::shared_future
- C++ 标准库扩展
- std::experimental::pmr::resource_adaptor
- std::experimental::invocation_type, std::experimental::raw_invocation_type
- C++ 标准库扩展,版本 2
- std::experimental::propagate_const
- std::experimental::ostream_joiner
- std::experimental::randint
- std::experimental::observer_ptr
- std::experimental::is_detected, std::experimental::detected_t, std::experimental::detected_or
- C++ 标准库扩展,版本 3
- std::experimental::scope_exit
- std::experimental::scope_fail
- std::experimental::scope_success
- std::experimental::unique_resource
- 并发扩展
- 制约与概念
- 范围扩展
- std::experimental::function
- std::experimental::nonesuch
- std::experimental::reseed
- std::experimental::shuffle
- std::experimental::when_all
- std::experimental::barrier
- std::experimental::latch
- std::experimental::make_array
- 数学特殊函数
- 文件系统库
- std::experimental::erased_type
- std::experimental::when_any
- std::experimental::make_ready_future
- std::experimental::make_exceptional_future
- std::experimental::flex_barrier
- 注释
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
位置:首页 > C++ 参考手册 >实验性 C++ 特性 > 范围扩展
范围扩展
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 | |
指定类型为标签说明符 (概念) | |
指定类型表示一个标签说明符及其元素类型 (概念) | |
为元组式类型增加具名访问器 (类模板) | |
有标签 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 (概念) | |
指定范围的迭代器满足 RandomAccessIterator (概念) | |
范围访问 | |
定义于命名空间
std::experimental::ranges | |
返回指向范围起始的迭代器 (定制点对象) | |
返回指向范围末尾的迭代器 (定制点对象) | |
获得指向范围的逆向迭代器 (定制点对象) | |
获得指向范围的逆向尾迭代器 (定制点对象) | |
范围原语 | |
定义于命名空间
std::experimental::ranges | |
获得能在常数时间计算大小的范围的大小 (定制点对象) | |
检查范围是否为空 (定制点对象) | |
获得指向连续范围起始的指针 (定制点对象) | |
获得范围的迭代器类型与哨位类型 (别名模板) |
算法
定义于头文件
<experimental/ranges/algorithm> | |
不修改序列的操作 | |
定义于命名空间
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 | |
判断一个序列是否为另一个序列的排列 (函数模板) | |
产生某个元素范围的按字典顺序的下一个较大的排列 (函数模板) | |
产生某个元素范围的按字典顺序的下一个较小的排列 (函数模板) |