首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >此函数期望从std::istream中解析出什么格式的输入?

此函数期望从std::istream中解析出什么格式的输入?
EN

Stack Overflow用户
提问于 2019-05-27 01:38:13
回答 1查看 74关注 0票数 1

我正在阅读一本很棒的书C++17 by Example,它通过展示一系列迷你项目来介绍C++17 --非常酷。

然而,在第2章中,当SetLinkedList之上实现时,有这样的代码:

代码语言:javascript
复制
void Set::read(std::istream& inStream) {
  int size;
  inStream >> size;

  int count = 0;
  while (count < size) {
    double value;
    inStream >> value;
    insert(value);
    ++count;
  }
}
代码语言:javascript
复制
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 << "}";
}
代码语言:javascript
复制
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++的新手,我不知道如何运行它。当然,我在提问之前做了一些研究,但我想出的方法并没有产生预期的结果:

代码语言:javascript
复制
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}

现在我在想:

  • 这是不是提供参数的正确方式,还是
  • it是正确的方式,错误一定在代码中的其他地方?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 01:45:49

Set::read读取的第一个数字是集合的大小。然后它读取这么多数字,并将它们添加到集合中。该行的其余部分被当前的read调用忽略,并由下一个调用获得,巧合的是,下一个集合的大小就是您要测试的下一个集合的大小。因此,输入1 2 3会产生一组大小为1的元素,其中只有一个元素2

请注意:与通常的C++迭代器的工作方式不同,hasNext是java风格的。也许你也可以考虑看看不同的手册。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56315927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档