我可以在兩個istream_iterators之間做一個賦值操作嗎?如果是這樣,那麼行爲會是什麼樣的,即,這兩個迭代器是否都會指向文件中的相同位置,即我們是否會得到兩個指向文件中同一行的指針?我可以在兩個istream_iterators之間做一個賦值操作嗎?
如果是這樣,我可以增加一個迭代器,讀取一些行,然後將其分配回其他迭代器,然後再次開始從我們早先的相同位置讀取行?
基本上我想寫一個模擬循環的程序。但是這應該在解析文件時發生。
我可以在兩個istream_iterators之間做一個賦值操作嗎?如果是這樣,那麼行爲會是什麼樣的,即,這兩個迭代器是否都會指向文件中的相同位置,即我們是否會得到兩個指向文件中同一行的指針?我可以在兩個istream_iterators之間做一個賦值操作嗎?
如果是這樣,我可以增加一個迭代器,讀取一些行,然後將其分配回其他迭代器,然後再次開始從我們早先的相同位置讀取行?
基本上我想寫一個模擬循環的程序。但是這應該在解析文件時發生。
istream_iterators是輸入迭代器而不是正向迭代器。這意味着它們是單遍迭代器,與多遍迭代器相反:無法返回序列,或者不止一次迭代序列。
可以指定某個istream_iterator
,但一個istream_iterator
不確指的特定位置的文件中,只是到目前位置,無論那是。因此,您正在考慮的內容將無法工作 - 您使用的任何迭代器都將繼續讀取當前的點,而不會返回到保存它時引用的位置。
這是保證,還是有可能的副本,你沒有增加得到FUBARed,因爲流不一定在預期的確切狀態? –
@SteveJessop:是的,我相信它是有保證的(§24.5.1/ 1):「運算符*的結果沒有被定義,對於任何其他**迭代器值,返回一個const T&。 [強調補充]。 –
嗯,我認爲這隱含意味着一個未被失效的迭代器值。一般來說,當你增加一個迭代器時,輸入迭代器會失效。 –
具體而言,您*可以*複製並分配它們,但增加一個將會使其任何副本無效。 –
@MikeSeymour:查看我對Steve Jessop的評論 - 我相信副本仍然有效(但增加一個會影響其他人將檢索的內容)。 –
@JerryCoffin:看起來你是對的;我只是看着InputIterator需求,但是(不小心或設計)流迭代器似乎需要保持無法引用。雖然沒有說明你會從他們那裏得到什麼。 –