2012-01-15 66 views
12

输入迭代器和只读前向迭代器之间有什么区别?输入迭代器和只读前向迭代器之间有什么区别?

由于后者是只读的,它们显然不满足输出迭代器的要求。而且,正因为如此,它们才是有效的输入迭代器,并有额外的保证(如果有的话)。问题是,还有什么额外的保证?

我的猜测是,前向迭代器是多遍且输入迭代器不是,我说得对吗?

回答

20

是的,输入迭代器是一次迭代器。你只能遍历它们一次,而前向迭代器是多遍的。

§24.2.3 [input.iterators] p2 (the table),的++r前置/后置条件柱:

预:r是提领。
post:r是可解引用的或r已过时。
后:以前值r的任何副本不再需要可解引用或位于==的域中。

最后一个后置条件意味着对a == b++a == ++b是不是要true需要。
相同子句,第3段:

[注:对于输入迭代,一个== b并不意味着++一个== ++ b。 (相等并不保证置换属性或引用透明度。)输入迭代器上的算法不应该尝试两次通过相同的迭代器。他们应该是单传算法。 [...]通过istream_iterator类模板,这些算法可以与istreams一起用作输入数据的来源。 末端音符]

§24.2.5 [forward.iterators]

P1一个类或指针类型X满足如果

  • [...]
  • 对象的正向迭代的要求类型为X提供了多道保证,如下所述。

P3两个提领迭代器和X类型说明B提供多遍保证如果:

  • a == b意味着++a == ++b
  • X是指针类型或表达(void)++X(a), *a相当于到表达式*a
+5

所以典型的例子可能是一个流迭代器(单通,输入迭代器),和一个单向链表(多道前向迭代器) – jalf 2012-01-15 11:06:12

+0

哦,顺便说一下,有一个upboat。 +1 – jalf 2012-01-15 12:24:03

相关问题