Les deux fonctions font des choses très différentes!
La resize()
méthode (et passer l'argument au constructeur équivaut à cela) insérera ou supprimera le nombre approprié d'éléments dans le vecteur pour lui donner une taille donnée (elle a un deuxième argument facultatif pour spécifier leur valeur). Cela affectera le size()
, l'itération passera sur tous ces éléments, push_back s'insérera après eux et vous pourrez y accéder directement en utilisant le operator[]
.
La reserve()
méthode alloue uniquement de la mémoire, mais la laisse non initialisée. Cela n'affecte que capacity()
, mais size()
restera 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 cela a été fait à 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 prévoyez d'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 me rendre compte que dans votre cas, la bonne réponse est de ne pas préallouer manuellement. Continuez simplement à insérer les éléments à la fin selon vos besoins. Le vecteur se réallouera automatiquement si nécessaire et le fera plus efficacement que la méthode manuelle mentionnée. Le seul cas où reserve()
cela a du sens est lorsque vous avez une estimation raisonnablement précise de la taille totale dont vous aurez besoin facilement disponible à l'avance.
EDIT2: Modification de la question de l'annonce: si vous avez une estimation initiale, alors reserve()
cette estimation. Si cela ne suffit pas, laissez simplement le vecteur faire son travail.
std::vector
.