Heim >Backend-Entwicklung >C++ >Können wir Elemente aus einem Vektor innerhalb einer bereichsbasierten C 11-For-Schleife entfernen?

Können wir Elemente aus einem Vektor innerhalb einer bereichsbasierten C 11-For-Schleife entfernen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 01:32:09860Durchsuche

Can We Remove Elements from a Vector Inside a C  11 Range-Based For Loop?

Entfernen von Elementen aus Vektoren in bereichsbasierten C 11-Schleifen

In C 11 bieten bereichsbasierte for-Schleifen eine praktische Möglichkeit zum Iterieren durch Containerelemente. Allerdings stellt das Entfernen von Elementen aus dem Container innerhalb dieser Schleifen eine Herausforderung dar.

Bedenken Sie den folgenden Code:

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv) {
    // Do some stuff
    // I need to remove this object from 'inv'...
}

Können wir Elemente innerhalb bereichsbasierter Schleifen entfernen?

Nein, Sie können innerhalb einer bereichsbasierten for-Schleife keine Elemente aus einem Vektor entfernen. Dies liegt daran, dass die Schleife durch die Erstellung einer Kopie des Vektoriterators funktioniert, die ungültig wird, wenn Elemente entfernt oder hinzugefügt werden.

Daher ist es wichtig, alternative Ansätze zum Ändern von Containern während der Iteration in Betracht zu ziehen.

Empfohlene Lösung

Der empfohlene Ansatz ist die Verwendung der herkömmlichen for-Schleife oder einer ihrer Varianten. Dadurch können Sie den Vektor direkt manipulieren und bei Bedarf Elemente entfernen. Zum Beispiel:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}

Das obige ist der detaillierte Inhalt vonKönnen wir Elemente aus einem Vektor innerhalb einer bereichsbasierten C 11-For-Schleife 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