¡Las dos funciones hacen cosas muy diferentes!
El resize()
método (y pasar el argumento al constructor es equivalente a eso) insertará o eliminará el número apropiado de elementos al vector para darle un tamaño dado (tiene un segundo argumento opcional para especificar su valor). Afectará a size()
, la iteración repasará todos esos elementos, push_back se insertará después de ellos y puede acceder directamente a ellos usando operator[]
.
El reserve()
método solo asigna memoria, pero la deja sin inicializar. Solo afecta capacity()
, pero no size()
cambiará. No hay valor para los objetos, porque no se agrega nada al vector. Si luego inserta los elementos, no ocurrirá ninguna reasignación, porque se realizó de antemano, pero ese es el único efecto.
Entonces depende de lo que quieras. Si desea una matriz de 1000 elementos predeterminados, use resize()
. Si desea una matriz en la que espera insertar 1000 elementos y desea evitar un par de asignaciones, use reserve()
.
EDITAR: El comentario de Blastfurnace me hizo leer la pregunta nuevamente y darme cuenta de que, en su caso, la respuesta correcta es no preasignar manualmente. Simplemente siga insertando los elementos al final según lo necesite. El vector se reasignará automáticamente según sea necesario y lo hará de manera más eficiente que la forma manual mencionada. El único caso en el que reserve()
tiene sentido es cuando tiene una estimación razonablemente precisa del tamaño total que necesitará fácilmente disponible por adelantado.
EDIT2: Edición de pregunta publicitaria: si tiene una estimación inicial, entonces reserve()
esa estimación. Si resulta que no es suficiente, simplemente deja que el vector haga lo suyo.
std::vector
.