Я бы сказал, что documentation довольно ясно на эту тему: все, что после того, как data() + size()
может быть выделено но не инициализируется памяти: если вы хотите также инициализировать эту память, вы должны использовать vector::resize
.
void reserve (size_type n);
Запрос изменение мощности
Просит, чтобы вектор емкость быть достаточно, чтобы содержать минимум п элементов.
Если n больше, чем текущая емкость вектора, функция вызывает контейнер для перераспределения его хранилища, увеличивая его емкость до n (или выше).
Во всех других случаях вызов функции не вызывает перераспределение , и емкость вектора не изменяется.
Эта функция не влияет на размер вектора и не может изменять ее элементы .
Я не уверен, почему вы хотели бы что-нибудь получить доступ после data() + size()
после reserve()
в первую очередь: предполагаемое использование reserve()
, чтобы предотвратить ненужные перераспределения, когда вы знаете или можете оценить ожидаемый размер вашего контейнера, но в то же время избегать ненужного начального объема памяти, который может быть либо неэффективным, либо непрактичным (например, нетривиальные данные для инициализации недоступны). В этой ситуации вы можете заменить log(N)
перераспределениями и копиями только с 1 улучшенной производительностью.
Почему 'reserve', а не' resize'? 'reserve' только выделяет в нем объекты памяти,' resize'. –
Можем ли мы увидеть ваш код? – wasthishelpful
@ n.m Изменение размера может быть настолько дорогостоящим. Резерв гарантирует, что вы сможете заменить объекты позже. –