輸入迭代器和只讀前向迭代器之間有什麼區別?輸入迭代器和只讀前向迭代器之間有什麼區別?
由於後者是隻讀的,它們顯然不滿足輸出迭代器的要求。而且,正因爲如此,它們纔是有效的輸入迭代器,並有額外的保證(如果有的話)。問題是,還有什麼額外的保證?
我的猜測是,前向迭代器是多遍且輸入迭代器不是,我說得對嗎?
輸入迭代器和只讀前向迭代器之間有什麼區別?輸入迭代器和只讀前向迭代器之間有什麼區別?
由於後者是隻讀的,它們顯然不滿足輸出迭代器的要求。而且,正因爲如此,它們纔是有效的輸入迭代器,並有額外的保證(如果有的話)。問題是,還有什麼額外的保證?
我的猜測是,前向迭代器是多遍且輸入迭代器不是,我說得對嗎?
是的,輸入迭代器是一次迭代器。你只能遍歷它們一次,而前向迭代器是多遍的。
從§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
。
所以典型的例子可能是一個流迭代器(單通,輸入迭代器),和一個單向鏈表(多道前向迭代器) – jalf 2012-01-15 11:06:12
哦,順便說一下,有一個upboat。 +1 – jalf 2012-01-15 12:24:03