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
Freigeben: 2024-12-06 01:32:09
Original
894 Leute haben es durchsucht

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

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

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!

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