std::ranges 提供链式调用与惰性求值,如 nums | std::views::filter | std::views::transform 可清晰表达偶数筛选并平方的逻辑,减少临时变量,提升代码可读性与复用性。

std::ranges 是 C++20 中引入的重要特性,它让容器操作更简洁、可读性更强。相比传统的 STL 算法,ranges 支持链式调用、惰性求值和组合视图,能显著减少临时变量和循环嵌套。
std::ranges 将算法与视图分离。视图(view)是轻量、惰性的数据序列封装,不会拷贝元素;算法则可以直接作用于范围而非迭代器对。
例如,筛选偶数并平方输出:代码示例:
#include <vector>
#include <iostream>
#include <ranges>
<p>std::vector<int> nums = {1, 2, 3, 4, 5, 6};</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/6e7abc4abb9f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">C++免费学习笔记(深入)</a>”;</p><p>for (int x : nums | std::views::filter([](int n){ return n % 2 == 0; })
| std::views::transform([](int n){ return n * n; })) {
std::cout << x << ' ';
}
// 输出:4 16 36
这里使用了管道操作符 | 组合多个视图,逻辑从左到右阅读,清晰自然。
常见的视图组合包括过滤、映射、切片、去重等,它们都返回一个 view 对象,只有在遍历时才计算结果。
例子:取前三个偶数的平方根
auto result = nums
| std::views::filter([](int n) { return n % 2 == 0; })
| std::views::transform([](int n) { return std::sqrt(n); })
| std::views::take(3);
这个表达式不会立即执行,直到你开始遍历 result 才逐个计算。
旧式 STL 常需定义中间变量、手动传迭代器,而 ranges 直接接受容器或视图。
对比查找最大偶数:
// 传统方式
auto it = std::find_if(nums.rbegin(), nums.rend(),
[](int n){ return n % 2 == 0; });
int max_even = (it != nums.rend()) ? *it : 0;
<p>// ranges 方式
auto max_even_view = nums | std::views::filter([](int n){ return n % 2 == 0; });
int max_even = std::ranges::max(max_even_view, std::less{}, [](int x){return x;});
也可以结合 std::ranges::max_element 直接使用:
if (auto it = std::ranges::max_element(
nums | std::views::filter([](int n){ return n % 2 == 0; }));
it != nums.end()) {
std::cout << "最大偶数:" << *it;
}
你可以将常用的处理流程封装成命名视图,提升代码复用性。
namespace my_views {
auto const even_squares = std::views::filter([](int n){ return n % 2 == 0; })
| std::views::transform([](int n){ return n * n; });
}
<p>// 使用
for (int x : nums | my_views::even_squares) {
std::cout << x << ' ';
}
这种模式适合构建领域相关的数据处理流水线。
基本上就这些。std::ranges 让 C++ 容器操作变得更像函数式编程,逻辑集中、易于测试和维护。虽然需要编译器支持 C++20,但在现代项目中值得尽早采用。
以上就是C++的std::ranges库怎么用_C++20 Ranges组合视图与算法简化代码的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号