我正在调试过程中,并缩小了一个问题,如下所示。本质上,为什么第一行输出是斐波那契数列,而第二行输出全是0?prev和next在这里到底做了什么?
为了方便起见,这里有一些极简主义的代码
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main(){
vector<int> a(10,1);
adjacent_difference(a.begin(), std::prev(a.end()), std::next(a.begin()), std::plus<> {});
copy(a.begin(), a.end(), std::ostream_iterator<int> {std::cout, " "});
cout << endl;
vector<int> b{0,2,5,4,2};
adjacent_difference(b.begin(), std::prev(b.end()), std::next(b.begin()) , std::plus<> {});
copy(b.begin(), b.end(), std::ostream_iterator<int> {std::cout, " "});
return 0;
}
输出:
1 1 2 3 5 8 13 21 34 55
0 0 0 0 0
Process finished with exit code 0
发布于 2019-05-24 05:47:28
std::adjacent_difference
做的第一件事是获取输入集的第一个值,并将其存储到输出集的第一个值中。这意味着在第二种情况下,b[0]
处的0
将写入b[1]
。然后,在下一次传递中,它从输入集中获取下一个元素,本例中为b[1]
,并将其添加到第一个元素中,因此您将获得0 + 0
并将其存储到b[2]
中。然后将b[2]
加上b[1]
,也就是0 + 0
,并将其存储到b[3]
中。这对整个集合都是这样的,在向量中只剩下0
。
https://stackoverflow.com/questions/56283255
复制相似问题