Heim > Backend-Entwicklung > C++ > 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
Freigeben: 2024-11-26 08:52:11
Original
842 Leute haben es durchsucht

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)
Nach dem Login kopieren

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()));
Nach dem Login kopieren

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());
Nach dem Login kopieren
  • Umgekehrt voranschreiten Iterator:
std::advance(i, 1);
m_CursorStack.erase(i.base());
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage