Heim > Artikel > Backend-Entwicklung > Wie lösche ich Elemente aus einer C-„std::list' mithilfe von Reverse-Iteratoren?
Löschen von Listenelementen mithilfe von Reverse-Iteratoren
In C erwartet die Löschfunktion im std::list-Container einen Iteratorparameter. Es kann jedoch vorkommen, dass Sie ein Element mithilfe eines umgekehrten Iterators (std::list::reverse_iterator) entfernen müssen.
Lösung:
Gemäß Im C-Standard besteht die folgende Beziehung zwischen einem Reverse-Iterator i und seinem Basis-Iterator i.base():
&*(reverse_iterator(i)) == &*(i - 1)
This bedeutet, dass der Reverse-Iterator auf das Element unmittelbar nach dem Element zeigt, auf das sein Basis-Iterator zeigt.
Um ein Element mit einem Reverse-Iterator zu löschen, müssen Sie einen Offset anwenden, um den Basis-Iterator zu erhalten:
m_CursorStack.erase(--(i.base()));
Dieser Ausdruck dekrementiert effektiv den Basisiterator um eins und zeigt so auf das zu seinde Element gelöscht.
Zusätzliche Lösungen (C 11 und höher):
m_CursorStack.erase(std::next(i).base());
std::advance(i, 1); m_CursorStack.erase(i.base());
Diese Lösungen sind prägnanter und klarer als der ursprüngliche Ansatz. Wählen Sie diejenige aus, die Ihren Anforderungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie lösche ich Elemente aus einer C-„std::list' mithilfe von Reverse-Iteratoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!