2010-07-01 7 views
3

Je comprends que le deque et le vecteur réservent un espace pour la croissance. vector :: capacity() est capable d'obtenir l'espace réservé interne pour un vecteur. Deque n'a pas un tel membre dans la norme. Y a-t-il un moyen d'obtenir cette information?Existe-t-il un moyen d'obtenir la taille de stockage interne de deque comme vecteur :: capacité?

+1

Voir aussi Sutter Herb [Guru de la semaine # 54: en utilisant le vecteur et Deque] (http : //www.gotw.ca/gotw/054.htm). –

+0

J'ai lu ce chapitre. Il n'y a peut-être aucune raison d'obtenir la capacité de deque dans la réalité, mais je suis simplement curieux. – Dingle

+0

Pour quelle raison voulez-vous connaître la capacité? Dans un vecteur, il est clair que la croissance est une opération plutôt coûteuse où tous les objets existants doivent être déplacés vers un emplacement différent en mémoire, mais avec la croissance des files d'attente ne coûte pas cher. C'est-à-dire: la capacité est le nombre d'éléments qu'elle peut contenir avant de devenir douloureuse. Et cela ne s'applique qu'aux vecteurs. –

Répondre

6

Non portable. La raison pour laquelle il n'y a pas de membre capacity pour deque est qu'il n'utilise pas de mémoire contiguë. Il n'y a aucune raison, sur le plan de la performance, de le considérer.

7

Vous devrez creuser dans l'implémentation pour comprendre cela. La version de std::deque fournie avec gcc 4.1.1 semble allouer de la mémoire dans les blocs de 512 octets. Mais c'est aussi loin que j'ai eu après 15 minutes de regarder tous les traits de soulignement et les lancers de style C à size_t. Et puis je suis tombé sur ce commentaire:

La mise en page initiale de la mémoire sous-jacente est un peu compliqué ...

+2

+1 J'aime les commentaires comme ça – Patrick

Questions connexes