В каком формате ввода эта функция рассчитывает проанализировать из std :: istream? - PullRequest
2 голосов
/ 26 мая 2019

Я слежу за великой книгой C ++ 17 по Примеру , которая представляет C ++ 17, демонстрируя серию мини-проектов - очень круто.

Однако вГлава 2, где Set реализована поверх LinkedList, есть этот код:

void Set::read(std::istream& inStream) {
  int size;
  inStream >> size;

  int count = 0;
  while (count < size) {
    double value;
    inStream >> value;
    insert(value);
    ++count;
  }
}
void Set::write(std::ostream& outStream) {
  outStream << "{";

  bool firstValue = true;
  Iterator iterator = first();

  while (iterator.hasNext()) {
    outStream << (firstValue ? "" : ", ") << iterator.getValue();
    firstValue = false;
    iterator.next();
  }

  outStream << "}";
}
int main() {
  Set s, t;

  s.read(std::cin);
  t.read(std::cin);

  std::cout << std::endl << "s = ";
  s.write(std::cout);
  std::cout << std::endl;

  std::cout << std::endl << "t = ";
  t.write(std::cout);
  std::cout << std::endl << std::endl;

  // snip
}

Я довольно новичок в C ++, и я не знаюкак запустить это.Конечно, я провел некоторое исследование, прежде чем спрашивать, но способ, которым я придумал, не дает ожидаемых результатов:

lambdarookies-MacBook:02-the-set-class lambdarookie$ ./02-the-set-class
1 2 3
3 4 5

s = {2}         // Expected: s = {1, 2, 3}
t = {3, 4, 5}

Теперь мне интересно:

  • Это простоне правильный способ предоставления аргументов, или
  • это правильный путь, и ошибка должна быть в другом месте кода?

1 Ответ

5 голосов
/ 26 мая 2019

Первое число, которое читает Set::read - это размер набора. Затем он читает столько чисел и добавляет их в набор. Остальная часть строки игнорируется текущим вызовом read и перехватывается следующим, что, по совпадению, является размером следующего набора, с которым вы тестируете. Следовательно, ввод 1 2 3 приводит к набору размера 1 с единственным элементом 2.

Обратите внимание: hasNext - это java-ism, в отличие от того, как работают обычные итераторы C ++. Возможно, вы могли бы также взглянуть на другое руководство.

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