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.