Zwei Iteratoren auf einen Stream
-
Hi,
ich habe Folgendes Problem:
Ich will zwei Iteratoren auf einen Stream packen.fstream input("tralala.txt"); istreambuf_iterator<char> start(input); istreambuf_iterator<char> end; istreambuf_iterator<char> last(input);Wenn ich nun start inkrementiere, erhöht sich last komischerweise auch immer. Beide Iteratoren zeigen dann immer auf die gleiche Stelle...
Kann man zwei Iteratoren nicht gleichzeitig auf einem Stream laufen lassen?grüße
-
Das dürfte daran liegen, daß istreambuf_iteratoren die Dateiposition nicht selber verwalten, sondern Bewegungen lediglich an den drunterliegenden Stream-Buffer weitergeben (und davon hast du nur einen) - aber afaik ist auch nicht garantiert, daß ein reiner Input-Iterator sich unabhängig von seinen Kopien bewegen lässt.
(bau dir doch einen eigenständigen Stream-Operator, der sich die Position im File merkt und vor jeder Lese/Schreiboperation erstmal seekg() bzw. seekp() aufruft)
PS: Boost::Spirit hat einen Multipass-Iterator, der auch für solche Probleme genutzt werden kann.
-
Ah ja.. hatte ich fast beführchtet.
vielen Dank!