与理解std :: view :: filter->懒惰执行

问题描述 投票:0回答:1
    auto ResultView
        {
              std::views::iota(1,30)
              | std::views::take(20)
              | std::views::filter([](int x){ return x%2!=0; })
        };
    std::cout<<ResultView[2];
我显然在过滤线上有问题,但我一生都无法弄清楚什么。请帮忙!

Clang ++(19.1.7)的eRROR味精: 错误:对于类型'Invoke_result_t

<__range_adaptor_closure_t<__bind_back_t<__fn, tuple

c++ filter view range lazy-evaluation
1个回答
1
投票
operator[]

一样直接访问一个特定项目(这就是您获得的错误的含义换句话说,您没有随机访问)。

如果您想拥有这种可能性,则可以从您的视图中拥有具有此操作员的东西,例如
std::vector

。您可以通过

std::ranges::to

函数轻松地做到这一点:
#include <ranges>
#include <vector>
#include <iostream>

int main (int argc, char** argv)
{
    auto res
    {
      std::views::iota(1,30)
      | std::views::take(20)
      | std::views::filter([](int x){ return x%2!=0; })
      | std::ranges::to<std::vector>()
    };
    
    std::cout << res[2] << "\n";
}
demo

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.