Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lösche ich Elemente aus einer C-„std::list' mithilfe von Reverse-Iteratoren?

Wie lösche ich Elemente aus einer C-„std::list' mithilfe von Reverse-Iteratoren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-26 08:52:11783Durchsuche

How to Erase Elements from a C   `std::list` Using Reverse Iterators?

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):

  • Verwendung von std::next:
m_CursorStack.erase(std::next(i).base());
  • Umgekehrt voranschreiten Iterator:
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn