istream_buf zauber ?



  • Hallo,

    istream input;
    istream_buf<char> aa(input), bb;
    copy(aa,bb,back_insert(to_my_string));

    Ich frage mich warum weiss istream_buf das bb auf input's ende zeigen soll ?

    Gruss
    templated

    🙂



  • istream_buf? Meinst du istream_iterator? Falls ja: bb muss doch gar nicht auf irgendein Ende zeigen. Der Vergleich mit einem default-konstruierten istream_iterator ist halt als Abfrage auf EOF implementiert.



  • ja ich meinte istream_iterator... sollte der denn nicht auf das ende (+1) des array's zeigen ?

    gruss

    Templated



  • Welches Arrays?



  • das character array von istream_iterator.



  • Wenn du nicht bereit bist, von deinen vorgefertigten Ansichten auch nur einen Millimeter abzurücken, kann ich dir nicht helfen.



  • Der istream_iterator zeigt auf gar kein Array - der übersetzt eine Dereferenzierung in einen >> Aufruf für den drunterliegenden Stream. Und wie Bashar schon sagte, ist der default-konstruierte Stream-Iterator (per Definition) identisch zu einem Iterator, dessen Stream das failbit gesetzt hat.



  • Achso... 💡 wenn ich das richrig verstehe, werden also nicht die Addressen sonder dessen inhalt verglichen. Und weil ein stream mit EOF endet wird am ende iterator.begin == (streambuf_iterator default constucor instanz) sein.
    Dies wir wohl nicht bei allen Iteratoren gleich sein ? Ein list<char>::iterator wird z.b. die adressen von begin und end vergleichen ? oder gibt es iteratoren die per default eine 0 (string teminator) setzen ?

    Gruss

    templated

    p.s. Dumme fragen gibt es nicht 😃



  • Wie der Vergleich definiert ist, hängt vom jeweiligen Iterator-Typ ab. Bei list<>::iterator (oder anderen Containerklassen) vergleichen die Operatoren tatsächlich, ob auf das selbe Objekt gezeigt wird. Deshalb übergibst du da als Endekennung auch l.end() - der Iterator hinter das letzte Element der Liste. IStream-Iteratoren sind halt dann "gleich", wenn sie entweder beide auf der selben Datei lesen oder beides EOF-Iteratoren sind.


Anmelden zum Antworten