Если я буду использовать .reserve (объекты) на векторе, то вектор выделит достаточно памяти для моего предположения количества объектов, что мне будет нужно.
Если я позже использую .clear (), который просто очистит вектор или сохранит мой ранее определенный резерв?
спасибо.
Указывается, что std :: vector
влияет на размер. Это может не повлиять на емкость. Для сброса емкости используйте трюк подкачки :
std::vector<int> v1;
// somehow increase capacity
std::vector<int>().swap(v1);
Примечание: Поскольку этот старый ответ все еще получает положительные голоса (поэтому люди его читают), я считаю необходимым добавить, что C ++ 11 добавил std :: vector <...> :: shrink_to_fit ()
, который запрашивает у вектора удаление неиспользуемой емкости.
Нет, не будет. Попробуйте это, вызвав vector :: capacity ()
.
Дополнительным свидетельством этого является появление shrink_to_fit
. В рабочем проекте стандарта упоминается:
Примечания: shrink_to_fit - это необязательный запрос на уменьшение емкости () до size (). [ Примечание: Запрос не является обязательным к разрешению оптимизации для конкретной реализации . - конец примечания]
Он, вероятно, не освободит зарезервированную память, хотя я не думаю, что это поведение указано в стандарте.
РЕДАКТИРОВАТЬ: Хорошо, только что проверил, и в стандарте только сказано, что постусловие таково, что size () == 0
, хотя я не встречал вектор
реализация, которая не сохраняет зарезервированную память.
Это не повлияет на размер базового буфера. Вот почему вы должны использовать такие трюки, как this, чтобы фактически избавиться от буфера или сделать его меньше.
Нет, это не установит резерв() в 0. Вызов clear() вызывает деструкторы каждого элемента и удаляет их из вектора, оставляя контейнер с размером 0, но емкость остается неизменной.