Heim >Backend-Entwicklung >C++ >Können wir Elemente aus einem Vektor innerhalb einer bereichsbasierten C 11-For-Schleife entfernen?
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!