Evet, giriş yineleyicileri tek geçişli yineleyicilerdir. İteratörler çok geçişli iken, yalnızca bunları bir kez yineleyebilirsiniz. §24.2.3 [input.iterators] p2 (the table)
kaynaktan
, ++r
öncesi/hedefşart kolon:
ön: r
dereferenceable olup.
posta: r
dereferenceable veya r
, uçtan uca bitti.
gönderi: r
'un önceki değerinin herhangi bir kopyasının artık kullanılamaz olması veya ==
etki alanında olması gerekmez.
son hedefşart a == b
için, ++a == ++b
true
olması gerekli olmadığını ima eder.
Aynı hüküm, paragraf 3:
[Not: girdi yineleyiciler için, b == ++ bir == ++ b anlamına gelmez. (Eşitlik, ikame mülkünü veya referans şeffaflığı garanti etmez.) Giriş yineleyicileri üzerindeki algoritmalar, hiçbir zaman iki kez aynı yineleyiciden geçmeyi denememelidir. tek geçişli algoritmaları olmalıdır. [...] Bu algoritmalar, istream_iterator
sınıfı şablon aracılığıyla giriş verilerinin kaynağı olarak istyonlar ile kullanılabilir. -end not]
§24.2.5 [forward.iterators]
p1 A sınıfı veya işaretçi türü X
Sağlama, bir ileri Yineleyici şartlar
nedenle tipik örnekler, bir akış yineleyici (tek-geçişli bir giriş-yineleyici) olabilir ve bir tek başına bağlantılı liste (çok geçişli ileri yineleyici) – jalf
ah, bu arada, bir upboat sahiptir. +1 – jalf