我正在阅读 Bjarne Stroustrup编写的C++编程语言第四版。在迭代器一章(第31.1.2章)中,它表示:

我对输入迭代器是否只能读取一次或重复读取进行了很多搜索,例如:
http://www.cplusplus.com/reference/iterator/InputIterator/
https://www.geeksforgeeks.org/input-iterators-in-cpp/
大多数建议输入迭代器只能读取一次。但是为什么作者反复对输入迭代器说呢?它是否正确?如果是这样,为什么输入迭代器可以被重复读取而输出迭代器只能被写入一次。我一直以为输入和输出迭代器是完全相反的。
感谢大家!

最佳答案

这本书是正确的。而矛盾的来源则不是。似乎没有规则允许通过输入迭代器间接读取一个对象不止一次。

其他来源可能会由于另一个类似的限制而感到困惑,即一旦输入迭代器已递增,则先前迭代器的所有副本都将失效,因此可能不再被间接使用。此限制由输出迭代器共享。例如:

value = *inputIt;
value = *inputIt; // OK
copyIt = inputIt;
++inputIt;
value = *copyIt;  // Not OK

本书对输出迭代器确实有局限性是正确的:
 *outputIt = value;
  ++outputIt;
 *outputIt = value; // OK
 *outputIt = value; // Not OK



许多输出迭代器也都是输入迭代器,因此“相反”并不是完全具有描述性。它们是部分重叠的需求。迭代器可以满足两组要求。



是;不需要输出迭代器来支持。

例如,考虑通过互联网发送数据包的输出迭代器。您已经写了一个数据包,它已经发送到Internet并被其他计算机接收。您无法及时返回并确定发送的数据包有所不同。您必须继续下一个数据包并发送。

关于c++ - 输入迭代器可以重复读取,而输出迭代器只能写入一次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54467575/

10-15 11:29