Un appel à std::vector::clear() set std::vector::capacité (en) à zéro?
Si j'utilise .réserve(articles) sur un vecteur, le vecteur va allouer suffisamment de mémoire pour mon estimation le nombre de points que je vais avoir besoin.
Si j'ai plus tard sur l'utilisation .clear(), est-ce que juste effacer le vecteur ou enregistrer mes anciennes défini réserve?
grâce.
- C'est un dupe de stackoverflow.com/questions/586634
- Non, ce n'est pas le cas, cette question ne mentionne même pas
clear()
. Le seul endroit où le mot "clair" est utilisé dans un commentaire qui commence par "Il n'est pas clair pour moi si ..." - Double Possible de Quelle est la norme de dire sur la manière dont l'appel clair sur un vecteur de changements de la capacité?
Vous devez vous connecter pour publier un commentaire.
Il est précisé que
std::vector<T>::clear()
affecte la taille. Il pourrait ne pas affecter la capacité. Pour la réinitialisation de la capacité, l'utilisation de la swap trick:Remarque: Depuis cette ancienne réponse est encore en train de upvotes (donc les gens le lire), je ressens le besoin d'ajouter que C++11 a ajouté
std::vector<...>::shrink_to_fit()
, qui demande à l'vecteur pour supprimer la capacité inutilisée.Il ne sera probablement pas libérer la mémoire réservée, bien que je ne pense pas que le comportement est spécifié dans la norme.
EDIT: Ok, viens de vérifier et la norme ne dit que la post-condition est que
size() == 0
bien que je n'ai pas rencontré unvector
de mise en œuvre qui ne s'accroche pas à la mémoire réservée.Pas il ne sera pas. Essayez en appelant
vector::capacity()
.D'autres preuves de ce qu'est l'apparition de
shrink_to_fit
. La norme de travail du projet mentionne:Non, il ne set (réserve) à 0. D'appel clair() appelle les destructeurs de chaque élément et les supprime à partir du vecteur, en laissant le récipient avec une taille de 0, mais la capacité reste inchangé.
clear()
.Il ne sera pas affecter le sous-jacent taille de la mémoire tampon. C'est pourquoi vous devez utiliser des trucs comme cette à fait se débarrasser de la mémoire tampon ou la rendre plus petite.