Löschen eines Elements aus einer Liste mithilfe eines Reverse-Iterators
Es kann vorkommen, dass Sie auf ein Szenario stoßen, in dem Sie ein Element aus einer Liste entfernen möchten list mit einem umgekehrten Iterator, aber die Funktion erase() akzeptiert nur einen regulären Iterator. Dies kann eine Herausforderung darstellen, da die Konvertierung eines Reverse-Iterators in einen regulären Iterator nicht einfach ist.
Lösung:
Der Schlüssel zur Lösung dieses Problems liegt im Verständnis der Beziehung zwischen einem Reverse-Iterator und seinem Basis-Iterator. Gemäß dem C-Standard ist der Basisiterator eines Reverse-Iterators i &*(i - 1). Das bedeutet, dass wir i dekrementieren, um den Basisiterator zu erhalten.
Beispiel:
Betrachten Sie den folgenden Codeausschnitt:
for ( std::list< Cursor::Enum & >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( --(i.base()) ); break; } }
Hier Beispielsweise wird der Basisiterator durch Dekrementieren von i.base() erhalten. Indem wir diesen Basisiterator an die Funktion erase() übergeben, können wir das gewünschte Element erfolgreich aus der Liste entfernen.
C 11-Lösungen:
Für C 11 und höher stehen zwei zusätzliche Lösungen zur Verfügung:
m_CursorStack.erase( std::next(i).base() );
Diese Lösung bleibt unverändert, während std::next() verwendet wird, um den Reverse-Iterator um eine Position nach vorne zu verschieben und so effektiv seinen Basis-Iterator abzurufen .
std::advance(i, 1); m_CursorStack.erase( i.base() );
In dieser Lösung wird der umgekehrte Iterator mit std::advance() um eine Position vorgerückt, wodurch sein Basisiterator effektiv am gewünschten Element zum Löschen ausgerichtet wird.
Für welche Lösung Sie sich auch entscheiden, diese Ansätze bieten saubere und unkomplizierte Methoden zum Löschen von Elementen aus einer Liste mithilfe eines umgekehrten Iterators.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe eines Reverse-Iterators in C ein Element aus einer Liste löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!