réduire la capacité d'un vecteur stl

Est-il un moyen de réduire la capacité d'un vecteur ?

Mon code insère des valeurs dans un vecteur (ne connaissant pas leur nombre à l'avance), et
quand cela se termine, les vecteurs sont utilisés uniquement pour les opérations de lecture.

Je suppose que je pourrais créer un nouveau vecteur, faire un .reseve() avec la taille et la copie
les articles, mais je n'aime pas vraiment le supplément de l'opération de copie.

PS: je n'ai pas de soins pour une solution portable, aussi longtemps que cela fonctionne pour gcc.

  • Juste une remarque, reserve() n'est pas nécessairement réservons le montant exact que vous transmettez; il se réserve d'un montant supérieur ou égal au montant que vous avez passer à la réserve).
  • Notez que le swap idiome ne effectuer une copie. Je ne sais pas si GCC est une extension pour libérer inutilisés mémoire réservée. À mon avis, une telle méthode devrait être dans la norme pour vector<>.
  • Envisagez d'utiliser un deque au lieu de vecteur. C'est presque aussi rapide que vecteur de mais ne conserve pas les données dans les états contigus des blocs et il n'a pas besoin de réserver()
  • Un vecteur n'a pas besoin de réserver() soit, c'est juste plus efficace de le faire plutôt que de continuer à élargir sa longueur, au besoin, pendant push_back()s.
  • Plus spécifique à la question de la réserve(), c'est qu'une deque n'a pas besoin de O(N) sur une capacité de seulement O(1) sur-capacité. Un vecteur besoins en O(N) au cours de capacité lors d'un redimensionnement de lui-même, afin de mettre en œuvre l'exigence d'insertion à la fin est amorti O(1) fois. C'est pourquoi deque est une bonne suggestion.
InformationsquelleAutor ynimous | 2009-07-10