此函数希望从std :: istream解析什么输入格式?

lam*_*kie 2 c++ c++17

我沿用了《Example》中的C ++ 17一书,该书通过展示一系列迷你项目介绍了C ++ 17,这很酷。

但是,在第2章中,在a Set之上实现a的LinkedList是以下代码:

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

  int count = 0;
  while (count < size) {
    double value;
    inStream >> value;
    insert(value);
    ++count;
  }
}
Run Code Online (Sandbox Code Playgroud)
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 << "}";
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)

我对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}
Run Code Online (Sandbox Code Playgroud)

现在我想知道:

  • 这仅仅是提供论据的正确方法,还是
  • 这是正确的方法,并且错误必须在代码的其他位置吗?

ere*_*non 5

Set::read读取的第一个数字是集合的大小。然后它读取那么多数字,并将它们添加到集合中。当前的调用会忽略该行的其余部分,read并由下一行选择该行,巧合的是,下一行是您要测试的下一组的大小。因此,输入1 2 3结果1只有一组elem 2

请注意:这hasNext是一种Java主义,与通常的C ++迭代器的工作方式不同。也许您可以考虑同时查看另一本手册。