iterator=revers_iterator



  • Gibts ne Möglichkeit, nen Iterator auf die selbe Stelle zu setzen wie ein revers_iterator?



  • Du kannst dir aus einem reverse_iterator den darunterliegenden Iterator. Da der aber um eine Stelle verschoben ist, müsstest du ihn nur noch etwas zurechtrücken:

    iterator pos = rpos.base();
    --pos;
    


  • CStoll schrieb:

    Da der aber um eine Stelle verschoben ist, (...)

    Man kann sich das Modell der Iteratoren etwa so vorstellen, dass sie auf die Zwischenräume zwischen den Elementen eines Containers zeigen. Beispiel:

    | 1 | 2 | 3 | 4 | 5 | 6 |
    +---+---+---+---+---+---+
    ^-- begin, rend         ^-- rbegin, end
    

    Dann zeigen begin() und rend() vor das erste Element, was die selbe Stelle wie hinter dem letzten Element der umgedrehten Sequenz ist. Analog verhält es sich mit end() und rbegin().

    So gesehen ist der unterliegende Iterator eines reverse_iterators nicht um eins verschoben, er kuckt nur in die andere Richtung, wenn er dereferenziert wird.



  • So kannst du es natürlich auch sehen, aber das ändert nichts am Ergebnis, daß *rpos.base() auf ein das Nachfolger-Element von *rpos verweist.



  • Das ist natürlich richtig - ich wollte dir auch gar nicht widersprechen (das wäre ja albern), sondern nur ergänzen, warum es sich so verhält.

    Viele Fragen, die man als Anfänger im Umgang mit Iteratoren hat, stellen sich überhaupt nicht mehr, wenn man das Modell kennt - sind Bereiche inklusive oder exklusive des letzten Iterators, fügt insert vor oder hinter dem bezeigten Element ein, solche Dinge. Auch der Umgang mit Reverse-Iteratoren ist so deutlich weniger hirnverrenkig. Ich hielt es für sinnvoll, es BigGreenFoot gegenüber zu erwähnen.


Anmelden zum Antworten