C++ 相邻的_差异与pre和next一起工作

C++ 相邻的_差异与pre和next一起工作,c++,C++,我正在进行调试,并缩小了一个问题,如下所示。本质上,为什么第一行输出是斐波那契序列,而第二行输出都是0?上一个和下一个在这里做什么 为了您的方便,这里是最简单的代码 #include <iostream> #include <vector> #include <numeric> using namespace std; int main(){ vector<int> a(10,1); adjacent_difference(a.begi

我正在进行调试,并缩小了一个问题,如下所示。本质上,为什么第一行输出是斐波那契序列,而第二行输出都是0?上一个和下一个在这里做什么

为了您的方便,这里是最简单的代码

#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;
}

std::nextendent_difference
所做的第一件事是获取输入集的第一个值,并将其存储到输出集的第一个值中。这意味着在第二种情况下,
b[0]
处的
0
被写入
b[1]
。然后在下一次传递时,它从输入集中获取下一个元素,在本例中为
b[1]
,并将其添加到第一个元素中,这样就得到
0+0
,并将其存储到
b[2]
中。然后取
b[2]
加上
b[1]
,这也是
0+0
,并将其存储到
b[3]
中。整个集合都是这样,向量中只剩下
0

第一件事
std::nexture_difference
就是获取输入集合的第一个值,并将其存储到输出集合的第一个值中。这意味着在第二种情况下,
b[0]
处的
0
被写入
b[1]
。然后在下一次传递时,它从输入集中获取下一个元素,在本例中为
b[1]
,并将其添加到第一个元素中,这样就得到
0+0
,并将其存储到
b[2]
中。然后取
b[2]
加上
b[1]
,这也是
0+0
,并将其存储到
b[3]
中。整个集合都是这样,向量中只剩下
0

1 1 2 3 5 8 13 21 34 55 
0 0 0 0 0 
Process finished with exit code 0