Heim >Backend-Entwicklung >C++ >Wie entferne ich Elemente während der Iteration sicher aus einer C-Map?

Wie entferne ich Elemente während der Iteration sicher aus einer C-Map?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 00:38:09468Durchsuche

How to Safely Remove Items from a C   Map During Iteration?

Elemente aus einer Karte während der Iteration in C entfernen

Wenn Sie eine Karte durchlaufen und versuchen, Elemente basierend auf bestimmten Bedingungen zu entfernen, ist dies der Fall Es ist wichtig, die Auswirkungen des Löschens von Elementen auf den Iterator zu berücksichtigen. Durch das Löschen eines Elements während der Iteration über die Karte wird der Iterator ungültig, was die Fortsetzung des Iterationsprozesses erschwert.

Standard-Löschsprache für assoziative Container

Die Standardsprache für Das Löschen aus einem assoziativen Container (z. B. einer Karte) während der Iteration erfolgt wie folgt folgt:

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

Erklärung

  • Aufheben der Schleifenbedingung: Dadurch wird sichergestellt, dass die Schleife nach dem Ende der Karte sucht jedes Mal durch.
  • Der Iterator wird im Entfernungsfall nicht erhöht: Wenn ein Element entfernt wird, zeigt der Iterator auf das nächste Element in der Karte. Dies bedeutet, dass die Schleife den Iterator nach dem Löschen nicht erhöhen sollte.
  • Const-Iteratoren: In der Zeit vor C 11 konnten Const-Iteratoren nicht gelöscht werden. In diesem Fall sollte ein herkömmlicher Iterator (z. B. std::map::iterator) verwendet werden.

Wenn Sie dieser Redewendung folgen, können Sie Elemente währenddessen sicher aus der Karte entfernen Iterieren, ohne die Iteratoren ungültig zu machen.

Das obige ist der detaillierte Inhalt vonWie entferne ich Elemente während der Iteration sicher aus einer C-Map?. 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