Heim >Backend-Entwicklung >C++ >Wie gehen „std::vector::resize()' von C 11 und „resize()' von Boost.Container mit nicht initialisierten Elementen um?
Vektorverhalten in C 11 und Boost.Container: Umgang mit nicht initialisierten Elementen
In C-Anwendungen werden Vektoren häufig als temporäre Puffer verwendet. Um eine ausreichende Kapazität sicherzustellen, werden diese Vektoren häufig Größenänderungsvorgängen unterzogen. In C 03 erweitert die Funktion std::vector
C 11 hat zwei Überladungen von resize() eingeführt:
Boost.Container erweitert diese Funktionalität um eine zusätzliche Überladung:
Um das Verhalten dieser Funktionen zu überprüfen, wurde ein Test mit C 11 durchgeführt std::vector
Erwartetes Verhalten
Für den C 03 std::vector
Tatsächliche Ergebnisse
Überraschenderweise zeigten die Testergebnisse, dass sowohl std::vector
Erklärung
Dieses unerwartete Verhalten deutet darauf hin, dass die resize()-Schnittstelle Die in C 11 eingeführte Änderung hat im gegebenen Szenario keine praktische Auswirkung. Die C 03 std::vector
Auswirkungen
Wenn Sie vermeiden müssen, nicht verwendete Elemente mit Nullen zu initialisieren, können Sie einen benutzerdefinierten Allokator verwenden, der die Methode „construct()“ von std::allocator abfängt und die Wertinitialisierung durch die Standardinitialisierung ersetzt. Gehen Sie jedoch mit Vorsicht vor, da die Anwendung dieser Vorgehensweise auf alle Initialisierungen zu unbeabsichtigten Folgen führen kann.
Das obige ist der detaillierte Inhalt vonWie gehen „std::vector::resize()' von C 11 und „resize()' von Boost.Container mit nicht initialisierten Elementen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!