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
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