对于c++范围库的简单理解

原文传送门: 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;
}
复制代码

 

posted @   babypapa  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示