Эти две функции делают совершенно разные вещи!
resize()
Метод (и передавая аргумент в конструктор эквивалентно) будет вставить или удалить соответствующее количество элементов в вектор , чтобы сделать его заданный размер (он имеет необязательный второй аргумент , чтобы определить их значение). Это повлияет на size()
, итерация пройдет по всем этим элементам, push_back вставит после них, и вы можете получить к ним прямой доступ, используя operator[]
.
reserve()
Метод только выделяет память, но оставляет его инициализирован. Это только влияет capacity()
, но не size()
изменится. Для объектов нет значения, потому что к вектору ничего не добавлено. Если вы затем вставите элементы, перераспределение не произойдет, потому что это было сделано заранее, но это единственный эффект.
Так что это зависит от того, что вы хотите. Если вы хотите массив из 1000 элементов по умолчанию, используйте resize()
. Если вам нужен массив, в который вы ожидаете вставить 1000 элементов и хотите избежать пары выделений, используйте reserve()
.
РЕДАКТИРОВАТЬ: комментарий Blastfurnace заставил меня снова прочитать вопрос и понять, что в вашем случае правильный ответ не распределяется вручную. Просто продолжайте вставлять элементы в конце, как вам нужно. Вектор будет автоматически перераспределяться по мере необходимости и будет делать это более эффективно, чем упомянутый ручной способ. Единственный случай, когда это reserve()
имеет смысл, - это когда у вас есть достаточно точная оценка общего размера, которая вам будет легко доступна заранее.
РЕДАКТИРОВАТЬ 2: Редактировать вопрос объявления: Если у вас есть начальная оценка, то reserve()
эта оценка. Если этого окажется недостаточно, просто дайте вектору сделать свое дело.
std::vector
.