Entfernen eines Elements mit einem Reverse-Iterator
Bei der Arbeit mit STL-Containern kann das Löschen eines Elements mit einem Reverse-Iterator eine Herausforderung darstellen. Standardmäßig erwartet die Löschfunktion einen Iterator und keinen umgekehrten Iterator.
Um dieses Problem zu beheben, gibt es mehrere Ansätze:
1. Erhalten des Basisiterators:
Der Standard definiert eine Beziehung zwischen einem Reverse-Iterator (i) und seinem entsprechenden Basis-Iterator (i.base()) als &*(reverse_iterator(i)) == & *(i - 1). Dies bedeutet, dass Sie den Basisiterator erhalten können, indem Sie --() auf i.base() anwenden.
2. C 11-spezifische Lösungen:
In C 11 haben Sie zwei zusätzliche Optionen:
Beispielcode:
for (std::list<Cursor::Enum>::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i) { if (*i == pCursor) { // C++11 solution m_CursorStack.erase(std::next(i).base()); // Alternatively, for pre-C++11 or if desired: m_CursorStack.erase(--(i.base())); break; } }
Wenn Sie diese Ansätze befolgen, können Sie mithilfe eines Reverse-Iterators effektiv ein Element aus einer Liste löschen und dabei die Standards einhalten Anforderungen.
Das obige ist der detaillierte Inhalt vonWie lösche ich Elemente mithilfe eines Reverse-Iterators sicher aus einem STL-Container?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!