【发布时间】:2016-02-06 22:17:57
【问题描述】:
我正在阅读C++ Standard(部分输入迭代器),我很难将文本以粗体显示:
注意:对于输入迭代器,a == b 并不意味着 ++a == ++b。 (平等不保证替代 属性或引用透明度。)输入迭代器上的算法永远不应该尝试通过 通过相同的迭代器两次。它们应该是单通道算法。
我知道输入迭代器是单通道的,但我似乎无法在 C++ 代码中对其进行可视化。有人可以举例说明如何使迭代器成为单通道吗?
【问题讨论】:
-
“如何让迭代器变成单通”是什么意思?为什么他们是单程的?或者如何使用这样的迭代器?
-
我不确定你在问什么。迭代器就是它们。他们不会“变成”任何东西。您是否在询问不是多遍的迭代器的示例?如果是这样,请考虑从
stdin -
@Revolver_Ocelot 抱歉不清楚,我想从头开始创建输入迭代器(不使用 STL 或 boost)进行学习。我只是不知道如何让我的输入迭代器类成为单通道(强制单通道)?据我了解,将迭代器作为输入或转发迭代器是底层容器或流 (
stdin) 的工作,对吗? -
您不会强制迭代器单次通过,这通常是副作用,例如从读取输入一次并丢弃以前的值。
-
@ManiH。输入迭代器不强制单次通过。如果您尝试进行第二次传递,它们将无法按预期工作:流迭代器只会从流中读取下一个条目而不是返回较早的值,移动迭代器可能会在第二次传递时调用未定义的行为,等等。
标签: c++ iterator input-iterator