Maison >développement back-end >C++ >Comment réduire la capacité d'un `std::vector` : le \'Swap Trick\' expliqué
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!