Maison > développement back-end > C++ > Comment réduire la capacité excédentaire dans un std :: vector : l'astuce du swap expliquée

Comment réduire la capacité excédentaire dans un std :: vector : l'astuce du swap expliquée

Patricia Arquette
Libérer: 2024-10-26 22:57:03
original
262 Les gens l'ont consulté

How to Reduce Excess Capacity in a std::vector: The Swap Trick Explained

Comment réduire efficacement la capacité dans un std::vector

Si vous vous retrouvez avec un std::vector qui a une capacité excédentaire, vous vous demandez peut-être s'il existe un moyen de le réduire pour libérer de la mémoire. Bien qu'il n'existe pas de méthode directe pour cela, il existe une technique intelligente connue sous le nom de « astuce d'échange ».

L'astuce d'échange

Selon l'article 17 de Effective de Scott Meyers STL, vous pouvez utiliser l'astuce d'échange pour réduire la capacité excédentaire d'un vecteur. Voici comment cela fonctionne :

<code class="cpp">vector<Person>(persons).swap(persons);</code>
Copier après la connexion

Après avoir effectué cet échange, le vecteur nommé « personnes » sera « réduit pour s'adapter », ce qui signifie que sa capacité sera réduite pour correspondre au nombre d'éléments qu'il contient.

Comment fonctionne l'astuce

Cette astuce profite du fait que le constructeur de copie du vecteur alloue uniquement la quantité de mémoire nécessaire pour les éléments copiés. En créant un nouveau vecteur avec le même nombre d'éléments que le vecteur d'origine, le constructeur de copie crée un nouveau vecteur avec une capacité plus petite.

La méthode swap échange ensuite le contenu et les capacités des vecteurs d'origine et des nouveaux. En conséquence, le vecteur d'origine se retrouve avec une capacité réduite.

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