2012-01-15 64 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

相關問題