我正在阅读 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/