首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >adjacent_difference使用pre和next

adjacent_difference使用pre和next
EN

Stack Overflow用户
提问于 2019-05-24 05:38:07
回答 1查看 39关注 0票数 0

我正在调试过程中,并缩小了一个问题,如下所示。本质上,为什么第一行输出是斐波那契数列,而第二行输出全是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
EN

回答 1

Stack Overflow用户

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档