neighbor_difference与pre和next一起使用

时间:2019-05-23 21:38:07

标签: c++

我正在调试中,并缩小了以下范围。本质上,为什么第一行输出是斐波那契数列,而第二行输出都是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;
}

输出:

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

1 个答案:

答案 0 :(得分:3)

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