【问题标题】:Can one define two `istream_iterator`s to a single file?一个文件可以定义两个“istream_iterator”吗?
【发布时间】:2010-11-20 21:44:58
【问题描述】:
ifstream file1;
file1.open("in1.txt");
istream_iterator<string> iterator1(file1);
copy(istream_iterator<string>(file1), istream_iterator<string>(), back_inserter(lstr));

我们可以让两个输入流迭代器指向一个文件吗?与上述情况一样,迭代器越来越先进(只有一次延迟,因为它应该是)并且副本中缺少第一个元素(字符串)。有没有可能的方法?

【问题讨论】:

  • 等等。 哪个迭代器正在高级/取消引用,以及以什么顺序??
  • 在复制函数中创建的迭代器(第一个参数),不指向文件中的第一个元素。

标签: c++ stl istream-iterator


【解决方案1】:

可以,但是如果你前进一个,文件指针会跟着前进,所以会影响另一个前进。此外,迭代器在创建时会提前一次,因此在需要之前不要创建它。

【讨论】:

  • 输入迭代器“前进”是什么意思?
  • @sbi: std::advance or increment.
  • @Fred 这不是输入迭代器的 noop 吗?
  • @sbi: 所有输入迭代器?不,它也不适用于 istream_iterators。
  • @sbi -- 我相信您在考虑输出迭代器,其中迭代器在解除引用时被推进,而递增是无操作的。
【解决方案2】:

标准在 24.1.1 中将其作为需求规则的注释进行了说明。由于每个人都想听标准语,我引用它

[注意:对于输入迭代器,a == b 并不意味着 ++a == ++b。 (相等性不保证替换属性或引用透明性。)输入迭代器的算法永远不应该尝试通过同一个迭代器两次。它们应该是单通道算法。

【讨论】:

  • 我不知道这在简单的英语中意味着什么。那些标准化的家伙对散文毫无意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多