54 votes

taille vs capacité d'un vecteur ?

Je suis un peu confus à ce sujet, les deux me semblent identiques. Bien qu'il puisse arriver que la capacité et la taille diffèrent selon les compilateurs, comment cela peut-il différer ? Il est également dit que si nous sommes à court de mémoire, la capacité change.

Toutes ces choses sont un peu floues pour moi.

Quelqu'un peut-il me donner une explication (si possible avec un exemple ou si je peux faire un test sur un programme pour le comprendre) ?

0 votes

Consultez également cette réponse stackoverflow.com/questions/2787397/ . Le langage utilisé est Java, mais le concept est le même.

90voto

John Calsbeek Points 19381

Taille n'est pas autorisé à différer entre plusieurs compilateurs. La taille d'un vecteur est le nombre d'éléments qu'il contient, qui est directement contrôlé par le nombre d'éléments que vous mettez dans le vecteur.

Capacité est la quantité d'espace total dont dispose le vecteur. Sous le capot, un vecteur utilise simplement un tableau. La capacité du vecteur est la taille de ce tableau. Elle est toujours égale ou supérieure à la taille. La différence entre les deux est le nombre d'éléments que vous pouvez ajouter au vecteur avant que le tableau sous le capot ne doive être réaffecté.

Vous ne devriez presque jamais vous soucier de la capacité. I

40voto

Kent Boogaart Points 97432

Taille : le nombre d'éléments actuellement dans le vecteur

Capacité : combien d'éléments peuvent être placés dans le vecteur avant qu'il ne soit "plein". Une fois qu'il est plein, l'ajout de nouveaux éléments entraîne l'allocation d'un nouveau bloc de mémoire plus grand et la copie des éléments existants dans ce bloc.

1 votes

Je ne dirais pas allouer mais réallouer. Comme le vecteur garantit que les données sont disposées de manière continue dans la mémoire, il ne peut utiliser plus d'un bloc de mémoire renvoyé par l'opérateur new . Ainsi, lorsque la limite est atteinte, le vecteur alloue un nouveau bloc de mémoire et copie les données existantes dans cette mémoire, puis supprime le bloc précédemment alloué. Ou bien, s'il est suffisamment intelligent, il utilisera la fonction realloc pour être un peu plus optimal.

0 votes

@Vlad : Je suppose que vous avez commenté avant de voir ma dernière modification ?

0 votes

Merci cette réponse m'a aidé à comprendre plus facilement que la réponse acceptée. J'ai créé ce pastebin pour cette réponse pour les futurs visiteurs : pastebin.com/Xx1RAc9K et le code d'exemple ici cplusplus.com/référence/vecteur/vecteur/réserve est beaucoup plus clair maintenant.

8voto

sanjeev Points 109

Taille est le nombre d'éléments présents dans un vecteur

Capacité est la quantité d'espace que le vecteur utilise actuellement.

Comprenons-le à l'aide d'un exemple très simple :

using namespace std;

int main(){
  vector<int > vec;
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1); 
  cout<<"size of vector"<<vec.size()<<endl;
  cout<<"capacity of vector"<<vec.capacity()<<endl;
  return 0;
}

actuellement la taille est de 3 et capacité est de 4.

Maintenant, si nous repoussons un élément de plus,

using namespace std;
  int main(){
  vector<int> vec;
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1); 
  vec.push_back(1);
  cout<<"size of vector"<<vec.size()<<endl;
  cout<<"capacity of vector"<<vec.capacity()<<endl;
  return 0;
}

maintenant la taille est : 4 la capacité est de 4

maintenant si nous essayons d'insérer un élément supplémentaire dans vector alors la taille deviendra 5 mais la capacité deviendra 8.

cela se produit en fonction du type de données de vector comme ici dans ce cas vector dans de type int comme nous savons que la taille de int est de 4 octets, donc le compilateur allouera 4 blocs de mémoire et quand nous essayons d'ajouter le 5ème élément.., vector::capacity() est le double de ce que nous avons actuellement.

Par exemple, si nous essayons d'insérer un 9ème élément, la taille de l'élément est de 1,5 mm. vector sera de 9 et la capacité sera de 16

6voto

Oli Charlesworth Points 148744

size() vous indique le nombre d'éléments dont vous disposez actuellement. capacity() indique la taille que peut atteindre le vecteur avant qu'il ne doive se réallouer de la mémoire.

La capacité est toujours supérieure ou égale à la taille. Vous ne pouvez pas indexer au-delà de l'élément #. size()-1 .

5voto

Pete Points 4035

La taille est le nombre d'éléments du vecteur. La capacité est le nombre maximum d'éléments que le vecteur peut actuellement contenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X