liberer la reserve d'un std::vector après remplissage... - C++ - Programmation
Marsh Posté le 29-07-2005 à 09:26:55
el muchacho a écrit : J'ai comme un gros doute sur cette réponse. |
+1. Au fait et si tu donnais la réponse?
Marsh Posté le 29-07-2005 à 10:05:18
En supposant que ta fonction était un exemple, je crois que la méthode préconisée est:
Code :
|
Mais vu que c'est plus ou moins ce qui se passe dans ton cas car tu renvoie une copie, il faudrait tester le capacity() de vect avec le capacity() du vecteur renvoyé par remplirVecteur().
Marsh Posté le 29-07-2005 à 15:43:13
Si je un main() comme cela :
Code :
|
J'obtiens comme sortie :
Code :
|
Donc apparemment le compilo (g++-3.3 dans mon cas), redimensionne la taille du vecteur automatiquement à la sortie de la fonction.
La solution est donc de passer par une fonction.
Marsh Posté le 29-07-2005 à 15:50:49
slash33 a écrit : +1. Au fait et si tu donnais la réponse? |
Si mes souvenirs sont exacts, il n'y a pas moyen de réduire explicitement la taille réservée d'un vector (sauf à faire un delete et une recopie), la gestion est à la charge de l'implémentation du container vector. Donc en fonction de ce que l'on veut faire, il peut être plus intéressant d'utiliser deque à la place de vector.
Marsh Posté le 29-07-2005 à 16:27:07
babthefox2002 a écrit : |
Non, il redimensionne pas. Tu récupères un copie du vect renvoyé et non pas directement vect. C'est cette copie qui s'auto-dimensionne correctement.
Marsh Posté le 01-08-2005 à 15:06:18
Code :
|
v_out est une copie de vect, ça revient à avoir:
Code :
|
soit
Code :
|
ce qui fait que v_out est correctement dimensionné, indépendamment de la taille / capacité de vect.
Marsh Posté le 28-07-2005 à 15:47:17
Bonjour,
je me pose une question à propos des std::vector : peut-t-on diminuer la taille de la réserve ?
Je m'explique, je veux par exemple créer un vecteur de taille inconnue mais quand même assez conséquente,
du coup j'utilise une réserve pour pouvoir éviter un nombre de trop grand de réallocations.
Puis je remplis mon vecteur (avec moins d'éléments que la taille de la réserve), et ensuite j'aimerai
pouvoir supprimer la réserve restante.
Peut être que cela se fait automatiquement mais je ne crois pas ?
Cela donnerai quelque chose comme celà :
Ici bien entendu j'aurai pu utiliser la taille de v (v.size()) pour réserver la bonne taille mais cela est
juste pour illustrer ce que j'essaye de faire, parce que lorsque je lis des valeurs dans un fichier ou une
base de données je ne connais pas par avance leur nombre !
Merci pour vos réponses.
Nicolas
Message édité par babthefox2002 le 29-07-2005 à 15:46:36