原文传送门: https://blog.csdn.net/yuejisuo1948/article/details/122149361
看了原文之后,第一时间对于std::ranges的第一印象是觉得更麻烦了,原本我们只需要掌握一个std::vector容器的使用方法,但使用范围库时,我们需要学会每种视图功能,直接就增加了学习负担。
但仔细一想,这其实是一种针对循环体内各种条件处理的简化手段,甚至能将各种条件视图封装成库以达成可复用的目的。
请看下面的代码:
以下代码在vs2022 17.1 中可进行编译, 项目-属性-C++语言标准 需要修改为: /std:c++latest
#include <iostream> #include <ranges> #include <math.h> namespace stdrv = std::ranges::views; namespace mathrv { //偶数 constexpr auto even = stdrv::filter([](int i) { return i % 2 == 0; }); //奇数 constexpr auto odd = stdrv::filter([](int i) { return i % 2 != 0; }); //结果n次幂 auto pow(int n) { return stdrv::transform([n](int i) {return (int)::pow(i, n); }); } } int main() { std::vector<int> v1 = { 9,8,7,6,5,4,3,2,1 }; auto v = v1 | mathrv::even | // 偶数 mathrv::pow(2) | // 结果2次幂 stdrv::reverse; // 倒序 for (auto n : v) std::cout << n << std::endl; return 0; }