Heim >Backend-Entwicklung >C++ >Wie kann ich beim Iterieren in C sicher Elemente aus einer Karte entfernen?

Wie kann ich beim Iterieren in C sicher Elemente aus einer Karte entfernen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-24 17:00:12634Durchsuche

How Can I Safely Remove Elements from a Map While Iterating in C  ?

Sichere Karteniteration mit Elemententfernung

Bei der Arbeit mit Karten kann es sein, dass Sie Elemente entfernen müssen, während Sie darüber iterieren. Die Verwendung der erase()-Methode der Karte direkt in einer Schleife kann jedoch dazu führen, dass Iteratoren ungültig werden. Um dieses Problem zu vermeiden, verwenden Sie die folgende Redewendung:

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  }
  else
  {
    ++it;
  }
}

Diese Redewendung verwendet eine nicht bereichsbasierte for-Schleife, um den Container direkt zu ändern. Indem wir den Iterator innerhalb der Schleife nur dann erhöhen, wenn das Element nicht entfernt werden soll, bewahren wir die Integrität der Iteration.

Beachten Sie, dass das Löschen von Const-Iteratoren vor C 11 eine etwas andere Syntax erforderte:

for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }

Denken Sie daran, dass das Entfernen von Elementen nicht gegen die Konstanz verstößt, da const-Elemente weiterhin nicht mehr existieren können.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Iterieren in C sicher Elemente aus einer Karte entfernen?. 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