
要使用C++20的Ranges库,需要确保编译器支持C++20标准,并正确包含相关头文件。Ranges库提供了一种更直观、函数式的方式来处理容器和范围操作,比如过滤、转换、取值等,无需手动写循环。
启用C++20并包含头文件
在代码中使用Ranges前,先确保编译时启用C++20。以g++为例:
g++ -std=c++20 your_file.cpp -o your_program然后在代码中包含必要的头文件:
#include#include
#include iostream>
基本概念:Views 和 Actions
Range的核心是view,它是一种轻量级、延迟计算的范围适配器,不会拷贝数据。常见操作通过管道符|链式调用。
立即学习“C++免费学习笔记(深入)”;
例如,从一个vector中筛选偶数并输出:
std::vectorfor (int n : nums | std::views::filter([](int i){ return i % 2 == 0; })) {
std::cout }
输出:2 4 6
常用Views操作
以下是一些常用的视图适配器:
- filter:按条件筛选元素
- transform:对每个元素进行变换
- take:取前N个元素
- drop:跳过前N个元素
- reverse:反转顺序
组合多个操作示例:
auto result = nums| std::views::filter([](int n) { return n > 2; })
| std::views::transform([](int n) { return n * n; })
| std::views::take(3);
这段代码会:筛选大于2的数,平方它们,然后取前3个结果。
转换为容器(Materializing Views)
View是延迟求值的,如果想保存结果到容器中,需显式构造:
std::vectorsquared.assign(result.begin(), result.end());
或者使用范围构造函数:
std::vector基本上就这些。C++20 Ranges让数据处理更简洁安全,避免了传统循环中的边界错误,也提升了可读性。注意并非所有编译器完全支持所有特性,建议使用较新版本的g++(10+)或Clang(13+)。











