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
Patricia ArquetteOriginal
2024-11-23 05:00:09495Durchsuche

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;
  }
}

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!

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