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

std::ranges 是 C++20 中引入的重要特性,它让容器操作更简洁、可读性更强。相比传统的 STL 算法,ranges 支持链式调用、惰性求值和组合视图,能显著减少临时变量和循环嵌套。
理解 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 对象,只有在遍历时才计算结果。
- filter:保留满足条件的元素
- transform:对每个元素应用函数
- take / drop:取前 N 个或跳过前 N 个
-
join:展平嵌套范围(如 vector
>) - reverse:逆序访问
例子:取前三个偶数的平方根
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~