我想打印前两个值,其中下一个值是当前值的两倍。
#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
我的代码出了什么问题?我不明白当我实际递增第二个位置时,第二个位置是如何从第一个位置递减的。 感谢您的帮助。
答案 0 :(得分:5)
你的程序给出了奇怪的结果,因为它没有考虑到这样一个事实,即函数参数的评估顺序(在这种情况下,运算符&lt;&lt;)是未指定。< / p>
我的回答 here ,详细解释了问题&amp;应该是一个很好的阅读。
您需要在单独的陈述中cout
。
cout << "found " << *diiter;
cout << " at " << distance(di.begin(), diiter)+1;
cout << " and " << *(++diiter);
cout << " at " << distance(di.begin(), diiter)+1;
cout << endl;
This 效果很好&amp;输出正确/期望的输出。