C/C++教程

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

本文主要是介绍对于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;
}

 

这篇关于对于c++范围库的简单理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!