Redimensionnement std :: vector : réduction de la capacité excédentaire
Question : Comment puis-je réduire la taille d'un std :: vector pour récupérer de l'espace inutilisé et réduire la capacité ?
Réponse : Pour réduire un std::vector à sa taille actuelle, vous pouvez utiliser "l'astuce d'échange" recommandée dans Effective STL par Scott Meyers ( Point 17). Voici comment cela fonctionne :
1. Créer un vecteur temporaire :
Créez un std::vecteur temporaire avec le même type de données que le vecteur d'origine.
<code class="cpp">vector<Person> temp(persons); // Assuming 'persons' is the original vector</code>
2. Échangez les vecteurs :
Échangez le vecteur d'origine avec le vecteur temporaire à l'aide de la fonction swap().
<code class="cpp">persons.swap(temp);</code>
Explication :
Le constructeur de copie std::vector alloue de la mémoire uniquement pour le nombre requis d'éléments à copier. En échangeant les vecteurs, vous créez essentiellement un nouveau vecteur qui correspond à la taille actuelle du vecteur d'origine. Le vecteur d'origine reçoit ensuite la taille nouvellement allouée du vecteur temporaire, réduisant ainsi efficacement la capacité excédentaire.
Cette approche est efficace et n'implique pas de copier des éléments individuels. Il repose sur l'opération swap, qui est une opération à temps constant.
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!