C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- std::ranges::begin
- std::ranges::cbegin
- std::ranges::end
- std::ranges::cend
- std::ranges::crbegin
- std::ranges::crend
- std::ranges::ssize
- std::ranges::data
- std::ranges::borrowed_range, std::ranges::enable_borrowed_range
- std::ranges::view, std::ranges::enable_view, std::ranges::view_base
- std::ranges::cdata
- std::ranges::iterator_t, std::ranges::sentinel_t, std::ranges::range_size_t, std::ranges::range_difference_t, std::ranges::range_value_t, std::ranges::range_reference_t, std::ranges::range_rvalue_reference_t
- std::ranges::dangling
- std::ranges::borrowed_iterator_t, std::ranges::borrowed_subrange_t
- std::ranges::range
- std::ranges::sized_range, std::ranges::disable_sized_range
- std::ranges::common_range
- std::ranges::viewable_range
- std::ranges::input_range
- std::ranges::output_range
- std::ranges::forward_range
- std::ranges::bidirectional_range
- std::ranges::random_access_range
- std::ranges::contiguous_range
- std::ranges::subrange
- 半正则包装 (C++20)
- std::ranges::views::empty, std::ranges::empty_view
- std::ranges::views::iota, std::ranges::iota_view
- std::ranges::views::counted
- std::ranges::views::all_t, std::ranges::views::all
- std::ranges::ref_view
- std::ranges::views::transform, std::ranges::transform_view
- std::ranges::views::reverse, std::ranges::reverse_view
- std::ranges::views::filter, std::ranges::filter_view
- 注释
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
范围库 (C++20)
范围库提供处理元素范围的组件,包括各种视图适配器。
定义于头文件 <ranges>
|
||
namespace std { namespace views = ranges::views; |
||
提供命名空间别名 std::views
,作为 std::ranges::views
的缩写。
定义于头文件
<ranges> | |
定义于命名空间
std::ranges | |
范围访问 | |
(C++20) |
返回指向范围起始的迭代器 (定制点对象) |
(C++20) |
返回指向范围结尾的迭代器 (定制点对象) |
(C++20) |
返回指向范围的逆向迭代器 (定制点对象) |
(C++20) |
返回指向范围的逆向尾迭代器 (定制点对象) |
(C++20) |
获得能在常数时间内计算大小的范围的大小 (定制点对象) |
(C++20) |
检查范围是否为空 (定制点对象) |
(C++20) |
获得指向连续范围的起始的指针 (定制点对象) |
范围原语 | |
获得范围的关联类型 (别名模板) | |
悬垂迭代器处理 | |
占位类型,指示不应返回迭代器或子范围,因为它可能悬垂 (类) | |
获得塑造 borrowed_range 的迭代器类型或子范围类型 (别名模板) | |
范围概念 | |
指定类型为范围,即它同时提供 begin 迭代器和 end 哨位 (概念) | |
指定类型为 range 而且能安全返回从该类型表达式获得的迭代器而无悬垂之虞 (概念) | |
指定范围可在常数时间内知晓其大小 (概念) | |
指定范围为视图,即它拥有常数时间的复制/移动/赋值 (概念) | |
指定范围的迭代器类型满足 input_iterator (概念) | |
指定范围的迭代器类型满足 output_iterator (概念) | |
指定范围的迭代器类型满足 forward_iterator (概念) | |
指定范围的迭代器类型满足 bidirectional_iterator (概念) | |
指定范围的迭代器类型满足 random_access_iterator (概念) | |
指定范围的迭代器类型满足 contiguous_iterator (概念) | |
指定范围拥有相同的迭代器和哨位类型 (概念) | |
指定针对 range 的要求,令其可安全转换为 view (概念) | |
视图 | |
用于定义 view 的辅助类模板,使用奇特重现模板模式 (类模板) | |
将迭代器/哨位对结合为一个 view (类模板) |
范围工厂
定义于头文件
<ranges> | |
定义于命名空间
std::ranges | |
无元素的空 view (类模板) (变量模板) | |
含有具有指定值的单个元素的 view (类模板) (定制点对象) | |
由通过重复对某个初值自增所生成的序列组成的 view (类模板) (定制点对象) | |
从迭代器和计数创建子范围 (定制点对象) |
范围适配器
范围适配器接受 viewable_range 为其第一参数并返回一个 view 。
若范围适配器仅接收一个参数,则它亦被称为使用管道运算符:若 C 是范围适配器对象且 R 为 viewable_range ,则此二表达式等价:
C(R) R | C
亦能连锁一元范围适配器以产生另一范围适配器:若 C 与 D 为范围适配器对象且 R 为 viewable_range ,则 C | D 亦为范围适配器对象,且此二表达式等价:
R | C | D // (R | C) | D R | (C | D)
若范围适配器接收多个参数,则这些形式等价:
adaptor(range, args...) adaptor(args...)(range) range | adaptor(args...)
此情况下, adaptor(args...) 为一元范围适配器对象。
定义于头文件
<ranges> | |
定义于命名空间
std::ranges | |
包含 range 的所有元素的 view (别名模板) (范围适配器对象) | |
某个其他 range 的元素的 view (类模板) | |
由 range 中满足某个谓词的元素构成的 view (类模板) (范围适配器对象) | |
对序列的每个元素应用某个变换函数的 view (类模板) (范围适配器对象) | |
由另一 view 的前 N 个元素组成的 view (类模板) (范围适配器对象) | |
由另一 view 的到首个谓词返回 false 为止的起始元素组成的 view (类模板) (范围适配器对象) | |
由另一 view 跳过首 N 个元素组成的 view (类模板) (范围适配器对象) | |
由另一 view 跳过元素的起始序列,直至首个谓词返回 false 的元素组成的 view (类模板) (范围适配器对象) | |
由拉平 range 的 view 所获得的序列构成的 view (类模板) (范围适配器对象) | |
用某个分隔符切割另一 view 所获得的子范围的 view (类模板) (范围适配器对象) | |
转换 view 为 common_range (类模板) (范围适配器对象) | |
以逆序迭代另一双向视图上的元素的 view (类模板) (范围适配器对象) | |
由在关联的输入流上相继应用 operator>> 获得的元素组成的 view (类模板) | |
选取仿 tuple 值组成的 view 和数值 N ,产生每个 tuple 的第 N 个元素的 view (类模板) (范围适配器对象) | |
选取仿 pair 值组成的 view 并产生每个 pair 的第一元素的 view (类模板) (范围适配器对象) | |
选取仿 pair 值组成的 view 并产生每个 pair 的第二元素的 view (类模板) (范围适配器对象) |
某些范围适配器用半正则包装包装其元素或函数对象。
示例
运行此代码
#include <vector> #include <ranges> #include <iostream> int main() { std::vector<int> ints{0,1,2,3,4,5}; auto even = [](int i){ return 0 == i % 2; }; auto square = [](int i) { return i * i; }; for (int i : ints | std::views::filter(even) | std::views::transform(square)) { std::cout << i << ' '; } }
输出:
0 4 16