печать двух смежных значений, возвращенных из - PullRequest
2 голосов
/ 16 августа 2011

Я хочу напечатать первые 2 значения, где следующее удваивается от текущего значения.

#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

Что не так с моим кодом?Я не понимаю, как вторая позиция уменьшается с первой, когда я на самом деле ее увеличивал.Спасибо за помощь.

1 Ответ

5 голосов
/ 16 августа 2011

Ваша программа дает странные результаты, потому что она не принимает во внимание тот факт, что порядок вычисления аргументов функции (в данном случае оператор <<) равен <strong>Не указано .

Мой ответ здесь , подробно объясняет проблему и должен быть хорошо прочитан.

Вам необходимо cout указать их в отдельных утверждениях.

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

Этот хорошо работает и выдает правильный / желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...