Heim > Backend-Entwicklung > C++ > Wie lösche ich Elemente mithilfe eines Reverse-Iterators sicher aus einem STL-Container?

Wie lösche ich Elemente mithilfe eines Reverse-Iterators sicher aus einem STL-Container?

Patricia Arquette
Freigeben: 2024-11-23 05:00:09
Original
485 Leute haben es durchsucht

How to Safely Erase Elements from an STL Container Using a Reverse Iterator?

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:

  • std::next(i).base(): Dadurch wird der Basisiterator zurückgegeben, der dem nächsten Element im entspricht Sequenz.
  • std::advance(i, 1); i.base(): Dadurch wird der Reverse-Iterator um eins vorgerückt und der Basis-Iterator zurückgegeben, der seiner aktuellen Position entspricht.

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

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!

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