以下代码将使用adjacent_difference算法生成前10个Fibonacci数:
v = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
std::adjacent_difference(v.begin(), v.end() - 1, v.begin() + 1, std::plus<int>());
for (auto n : v) {
std::cout << n << ' ';
}
std::cout << '\n';
Run Code Online (Sandbox Code Playgroud)
输出:1 1 2 3 5 8 13 21 34 55
但是,如果我想继续生成Fibonacci数,直到达到(例如)4,000,000的值(例如,不是第四百万个Fibonacci数,而是第N个Fibonacci数,其值恰好是400万(或更大)),该怎么办?
显然,使用push_back执行while循环可以完成这项工作,但我想知道是否可以将STL算法与back_inserter和lambda函数结合使用以指定重复直到条件(例如,在达到或超过值400万之后停止插入)?
我看到的问题是大多数算法都在一个范围内运行,并且提前我们不知道需要多少元素才能产生400万的Fibonacci数.