Дві функції роблять дуже різні речі!
resize()
Метод (і передаючи аргумент в конструктор еквівалентно) буде вставити або видалити відповідну кількість елементів в вектор , щоб зробити його заданий розмір (він має необов'язковий другий аргумент , щоб визначити їх значення). Це вплине на size()
, ітерація перейде на всі ці елементи, push_back вставить після них, і ви можете безпосередньо отримати доступ до них за допомогою operator[]
.
reserve()
Метод тільки виділяє пам'ять, але залишає його инициализирован. Це лише впливає capacity()
, але size()
буде незмінним. Немає значення для об’єктів, тому що у вектор не додається нічого. Якщо потім вставити елементи, перерозподіл не відбудеться, оскільки це було зроблено заздалегідь, але це єдиний ефект.
Тож це залежить від того, що ви хочете. Якщо ви хочете масив з 1000 елементів за замовчуванням, використовуйте resize()
. Якщо ви хочете масив, до якого ви плануєте вставити 1000 елементів і хочете уникнути пари виділень, використовуйте reserve()
.
EDIT: Коментар Blastfurnace змусив мене прочитати запитання ще раз і зрозумів, що у вашому випадку правильної відповіді не вказувати вручну. Просто продовжуйте вставляти елементи в кінці, як вам потрібно. Вектор буде автоматично перерозподіляти по мірі необхідності і буде робити це більш ефективно , ніж ручний спосіб згадується. Єдиний випадок, коли reserve()
є сенс, коли ви маєте досить точну оцінку загального розміру, який вам буде потрібно легко отримати заздалегідь.
EDIT2: Редагування рекламного питання: Якщо у вас є початкова оцінка, тоді reserve()
ця оцінка. Якщо цього виявляється недостатньо, просто дозвольте вектору це зробити.
std::vector
.