Maison >développement back-end >C++ >Comment `std::vector::resize()` de C 11 et `resize()` de Boost.Container gèrent-ils les éléments non initialisés ?
Comportement des vecteurs en C 11 et Boost.Container : gestion des éléments non initialisés
Dans les applications C, les vecteurs sont couramment utilisés comme tampons temporaires. Pour garantir une capacité adéquate, ces vecteurs subissent souvent des opérations de redimensionnement. En C 03, la fonction std::vector
C 11 a introduit deux surcharges de resize() :
Boost.Container étend encore cette fonctionnalité avec une surcharge supplémentaire :
Pour vérifier le comportement de ces fonctions, un test a été réalisé à l'aide de C 11 std::vecteur
Comportement attendu
Pour le C 03 std::vector
Résultats réels
Étonnamment, les résultats des tests ont révélé que les deux std::vector
Explication
Ce comportement inattendu suggère que l'interface resize() le changement introduit dans C 11 n’a aucun effet pratique dans le scénario donné. La fonction C 03 std::vector
Implications
Si vous devez éviter d'initialiser des éléments inutilisés avec des zéros, vous pouvez utiliser un allocateur personnalisé qui intercepte la méthode construct() de std::allocator et remplace l'initialisation de la valeur par l'initialisation par défaut. Cependant, procédez avec prudence, car l'appliquer à toutes les initialisations peut entraîner des conséquences inattendues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!