Les deux fonctions font des choses très différentes !
El resize()
(et passer l'argument au constructeur est équivalent à cela) insérera ou supprimera le nombre approprié d'éléments dans le vecteur pour lui donner une taille donnée (il a un second argument optionnel pour spécifier leur valeur). Elle affectera le size()
l'itération passera en revue tous ces éléments, le push_back les insérera après et vous pourrez y accéder directement en utilisant la balise operator[]
.
El reserve()
alloue seulement de la mémoire, mais la laisse non initialisée. Elle n'affecte que capacity()
mais size()
sera inchangé. Il n'y a pas de valeur pour les objets, car rien n'est ajouté au vecteur. Si vous insérez ensuite les éléments, aucune réallocation ne se produira, car elle a été faite à l'avance, mais c'est le seul effet.
Cela dépend donc de ce que vous voulez. Si vous voulez un tableau de 1000 éléments par défaut, utilisez resize()
. Si vous voulez un tableau dans lequel vous vous attendez à insérer 1000 éléments et que vous voulez éviter quelques allocations, utilisez reserve()
.
EDIT : Le commentaire de Blastfurnace m'a fait relire la question et je me suis rendu compte que, dans votre cas, la réponse correcte est ne pas préallouer manuellement. Continuez à insérer les éléments à la fin selon vos besoins. Le vecteur réallouera automatiquement les éléments selon les besoins et le fera plus efficacement que la méthode manuelle mentionnée. Le seul cas où reserve()
est utile lorsque vous disposez à l'avance d'une estimation raisonnablement précise de la taille totale dont vous aurez besoin.
EDIT2 : Modification de la question de l'annonce : Si vous avez une estimation initiale, alors reserve()
cette estimation. S'il s'avère que ce n'est pas suffisant, laissez le vecteur faire son travail.