Maison >développement back-end >C++ >Comment réduire la capacité d'un `std::vector` : le \'Swap Trick\' expliqué

Comment réduire la capacité d'un `std::vector` : le \'Swap Trick\' expliqué

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 15:58:30247parcourir

How to Shrink a `std::vector`'s Capacity: The

Comment réduire la capacité d'un std::Vector

Cette question, qui a été posée précédemment, répond à un problème spécifique rencontré par de nombreux programmeurs lorsqu'ils travaillent avec std :: vecteurs. Il recherche une méthode pour réduire la capacité d'un vecteur, en réduisant son allocation de mémoire excédentaire après que son contenu a été réduit.

Réponse :

La solution recommandée, comme suggérée dans Effective STL de Scott Meyers (article 17), consiste à utiliser « l'astuce du swap » pour réduire la capacité excédentaire. Cette méthode consiste à créer un nouveau vecteur avec la capacité réduite souhaitée et à échanger son contenu avec le vecteur d'origine.

<code class="cpp">vector<Person>(persons).swap(persons);</code>

Après avoir effectué cet échange, le vecteur d'origine, désormais vide, sera libéré et la nouvelle copie prendra sa place avec sa capacité réduite qui convient parfaitement à son contenu actuel.

Principe sous-jacent :

Cette technique exploite un aspect clé du constructeur de copie du vecteur comportement. Lors de la copie d'éléments à partir d'un vecteur, le nouveau vecteur alloue uniquement suffisamment de mémoire pour accueillir les éléments copiés, quelle que soit la capacité du vecteur d'origine. En échangeant le nouveau vecteur réduit avec l'original, la capacité excédentaire est efficacement 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!

Déclaration:
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