6
votes

Quelle est la capacité d'un vecteur vide?

ressemble à une question stupide. Mais commentaire à mon Réponse à une des questions de cette question m'a fait penser à nouveau.

[Le commentaire dit, la capacité n'a pas besoin de zéro pour vecteur vide]

Par défaut, ma réponse serait 0 car il n'y a pas d'éléments à l'intérieur du vecteur. Il est logique de garder la capacité de 0 et de la première allocation qu'il peut augmenter sans aucun succès de performance.

Mais la norme ne dit rien. (J'ai également vérifié dans Josuttis Book).

est-ce une option purement spécifique? Un fournisseur STL utilise-t-il un nombre arbitraire en tant que capcité pour le vecteur vide?

Toutes les pensées ...


0 commentaires

4 Réponses :


7
votes

La capacité peut être ce que la sensation des implémentations est correcte ou nécessaire.

Il convient également de noter qu'il n'est jamais "sûr" de supposer que vous connaissez la capacité actuelle sans appel à cette fonction. Si vous réservez 10 éléments, la mise en œuvre est libre d'allouer cent si elle le souhaite. Ou 11, 42 (préféré) ou seulement 10.


1 commentaires

En effet. GNU STL commence par une capacité de 0. La spécification API Java dit qu'il commence par une capacité de 10. C'est vraiment un détail de mise en œuvre.



0
votes

Pour une numérisation rapide de Google et en rebondissant quelques forums aléatoires (de pedigree généralement inconnu, oui), il semble y avoir une mise en œuvre spécifique.

À peu près un non-problème depuis que vous pouvez le modifier immédiatement avec un appel à réserve .


0 commentaires

16
votes

c ++ standard 23.2.4.2 dit seulement que vecteur :: capacité est

Le nombre total d'éléments que le vecteur peut contenir sans nécessiter une réaffectation.

Cela signifie que la valeur réelle est complètement spécifique de la mise en œuvre.


0 commentaires

-1
votes

On peut changer la capacité du vecteur en utilisant redize () API sur le vecteur si on est sûr de quel vecteur de données va stocker et que la mise en œuvre est spécifique.


3 commentaires

> On peut changer la capacité du vecteur en utilisant Redize () Non, cela modifie également la taille. La réserve change la capacité sans affecter la taille.


Yup Fred Vous avez des réserves droites uniquement change la capacité sans affecter la taille du vecteur. excuses.


Plus précisément, la capacité d'un vecteur <> peut être redimensionnée en appelant soit réserve () ou redimensionner (). Ces fonctions membres diffèrent à deux égards. Contrairement à redimensionner (), qui alloue la mémoire et l'initialise avec une valeur par défaut, réserve () n'allocie que la mémoire brute sans initialisation. De plus, la réserve () ne change pas la taille d'un vecteur; Cela ne change que la capacité du vecteur.