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