打印从adjacent_find返回的两个相邻的值

printing two adjacent values returned from adjacent_find

本文关键字:两个 adjacent find 返回 打印      更新时间:2023-10-16

我想打印前两个值,其中下一个值是当前值的两倍。

#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
bool doubled (int x, int y) { return x*2 == y; }
int main()
{
  deque<int> di;
  deque<int>::iterator diiter;
  for (int i=0; i<=10; i+=2) di.insert(di.end(), i);
  for (diiter = di.begin(); diiter != di.end(); ++diiter)
    cout << *diiter << " ";
  cout << endl;
  diiter = adjacent_find(di.begin(), di.end(), doubled);
  if (diiter != di.end()) {
    cout << "found " << *diiter << " at " << distance(di.begin(), diiter)+1 
         << " and " << *(++diiter) << " at " << distance(di.begin(), diiter)+1 
         << endl;
  }
}

输出为

0 2 4 6 8 10 
found 4 at 3 and 4 at 2

不是我期望的,应该是:

0 2 4 6 8 10 
found 2 at 2 and 4 at 3

我的代码有什么问题?我不明白第二个位置是怎么从第一个位置减少的,而实际上我是在增加它。谢谢大家的帮助。

你的程序给出了奇怪的结果,因为它没有考虑到这样一个事实,即函数参数的求值顺序(在本例中为操作符<<)是未指定

我的答案在这里,详细解释了这个问题&应该是本好书。

您需要在单独的语句中cout它们。

 cout << "found " << *diiter;
 cout << " at " << distance(di.begin(), diiter)+1;
 cout << " and " << *(++diiter);
 cout << " at " << distance(di.begin(), diiter)+1;
 cout << endl;

这个工作得很好&输出正确的/期望的输出