【发布时间】:2021-11-18 12:06:22
【问题描述】:
在以下代码 sn-p 的for 循环中,我正在尝试应用views::filter。但是会导致类型不匹配和赋值错误。
#include <iostream>
#include <vector>
#include <numeric>
#include <range/v3/all.hpp>
int main()
{
int limit =100;
std::vector<int> numbers(100);
std::iota(numbers.begin(), numbers.end(), 1);
auto results = numbers | ranges::views::filter([](int n) {return n != 1; });
int sqrt_limit = std::sqrt(limit);
for (int i = 2; i <= sqrt_limit; i++)
{
results = results | ranges::views::filter([i](int n) {return n == i
|| n % i != 0; });
}
}
错误 C2679 二进制“=”:未找到采用“ranges::filter_viewranges::filter_view<:ref_view> 类型的右侧操作数的运算符>,Arg>,main::
>' (或没有可接受的转换)`
所以基本上我怎样才能在numbers上应用views::filter,在results上分配结果,然后在results上应用views::filter,然后再次在results上分配结果?
std::vector<int> numbers(100);
std::iota(numbers.begin(), numbers.end(), 1);
auto results = numbers | ranges::views::filter([](int n) {return n != 1; });
results = results | ranges::views::filter([i](int n) {return n == 2
|| n % 2 != 0; });
【问题讨论】:
标签: c++ functional-programming c++20 range-v3