Maison > développement back-end > C++ > Comment réduire la capacité d'un « std :: vector » ?

Comment réduire la capacité d'un « std :: vector » ?

Patricia Arquette
Libérer: 2024-10-29 03:07:30
original
732 Les gens l'ont consulté

 How to Reduce the Capacity of a `std::vector`?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal