无法对 range-v3 中的斐波那契数列调用反向
failure to invoke reverse on a fibonacci sequence in range-v3
我似乎无法让 view::reverse
对使用 range-v3
生成的斐波那契数列 v
的前 10 个元素(使用 view::take(10)
)进行运算=17=]
#include <iostream>
#include <range/v3/view/iota.hpp>
#include <range/v3/view/generate.hpp>
#include <range/v3/view/take.hpp>
#include <range/v3/view/reverse.hpp>
using namespace ranges;
int main() {
int i = 0 ; int j = 1;
auto v = view::generate([&]()->int{int tmp = i; i += j; std::swap(i, j); return tmp;}); // fibonacci
std::cout << (v | view::take(10) | view::reverse) << '\n';
return 0;
}
我收到以下错误(随后是更多与模板相关的输出):
error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'void')
std::cout << (v | view::take(10) | view::reverse) << '\n';
但是,如果我使用 view::iota
创建 v
,例如,
auto v = view::iota(20);
我没有收到任何错误和预期的输出。
怎么了?
view::generate
产生了一个输入范围。您不能反转输入范围。这需要双向。另一方面,view::iota
生成 RandomAccess 范围,可以反转。
我似乎无法让 view::reverse
对使用 range-v3
生成的斐波那契数列 v
的前 10 个元素(使用 view::take(10)
)进行运算=17=]
#include <iostream>
#include <range/v3/view/iota.hpp>
#include <range/v3/view/generate.hpp>
#include <range/v3/view/take.hpp>
#include <range/v3/view/reverse.hpp>
using namespace ranges;
int main() {
int i = 0 ; int j = 1;
auto v = view::generate([&]()->int{int tmp = i; i += j; std::swap(i, j); return tmp;}); // fibonacci
std::cout << (v | view::take(10) | view::reverse) << '\n';
return 0;
}
我收到以下错误(随后是更多与模板相关的输出):
error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'void')
std::cout << (v | view::take(10) | view::reverse) << '\n';
但是,如果我使用 view::iota
创建 v
,例如,
auto v = view::iota(20);
我没有收到任何错误和预期的输出。
怎么了?
view::generate
产生了一个输入范围。您不能反转输入范围。这需要双向。另一方面,view::iota
生成 RandomAccess 范围,可以反转。