Maison >développement back-end >C++ >L'interface `std::vector::resize()` de C 11 change-t-elle efficacement la valeur et initialise les nouveaux éléments ?
En C 03, std::vector
À l'aide du vecteur
Cependant, en mode C 11, les vecteurs std :: vector et Boost.Container sont toujours initialisés nouveaux éléments avec des zéros lors de l'utilisation de la surcharge destinée à l'initialisation de la valeur. Cela soulève la question :
Le changement d'interface C 11 std::vector::resize() est-il réellement efficace ?
Les résultats suggèrent que le changement d'interface n'a pas eu l'effet escompté, car de nouveaux éléments sont toujours en cours d'initialisation dans les deux implémentations.
Addendum
Pour répondre aux limitations de l'allocateur existant, un adaptateur d'allocateur alternatif a été proposé qui fournit un moyen plus sûr et plus fiable d'obtenir l'initialisation de la valeur sans initialiser tous les types d'éléments :
template <typename T, typename A=std::allocator<T>> class default_init_allocator : public A { // ... implementation };
Cet adaptateur s'interpose sur construct() appelle value- initialisation, en les transformant en appels d'initialisation par défaut. Il gère également correctement l'initialisation par défaut.
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!