Ich schreibe ein iterator
(eigentlich ist es const_iterator
für ein aktuelles Objekt, und ich möchte auch ein reverse_const_iterator
auch schaffen.C++ Iterator und Reverse-Iterator
Ich sah mich um, um zu sehen, wie dies zu tun, und ich stolperte über this:
Beachten sie, dass jedoch, wenn ein Iterator umgekehrt wird, ist die umgekehrte Version nicht im Bereich auf das gleiche Element zeigen, aber auf die einem vorausgehende Dies um so zu arrangieren. für die Vergangenheit am Ende Element einer Reihe: Ein It Erator, der auf ein Element extend-the-end in zeigt, wird ein umgekehrter Bereich so geändert, dass er auf das letzte Element (nicht ) des Bereichs zeigt (dies wäre das erste Element des Bereichs, wenn umgekehrt ist). Und wenn ein Iterator für das erste Element in einem Bereich umgekehrt ist, zeigt der umgekehrte Iterator auf das Element vor dem ersten Element (dies wäre das Element am Ende des Bereichs, wenn umgekehrt wurde).
Ist das, was aus der Sicht der Benutzer geschieht, oder wenn Sie dereferenzieren ein reverse_iterator
tut es nicht abstrakt diese weg von Ihnen, den Wert/Referenz des Objekts geben Sie denken es zeigt? Ist das nur Implementierungsdetail?
Mein Verständnis war:
for(i = obj.rbegin(); i != obj.rend(); i++)
zu
for(i = obj.begin(); i != obj.end(); i++)
außer in umgekehrten entspricht. Und so würde *i
im ersten Fall rückwärts durch den Container gehen und im zweiten Fall durch den Container gehen. Ist mein Instinkt richtig?
Es funktioniert einfach. –
Als eine Randnotiz: Wenn Sie mit Iteratoren arbeiten, sollten Sie immer Pre-Inkrement ('++ i') anstelle von Post-Inkrement verwenden, da es effizienter sein kann. –