reserve
изменяет внутренний размер контейнера (так что capacity()
теперь больше), но size
массива не увеличивается (size()
остается таким же, как до вызова). Таким образом, чтобы прямо ответить на ваш вопрос, да , он делает capacity
вектора не менее n
, где n
- это параметр, который вы задали для reserve
.
Я не знаю, является ли неопределенным поведение доступа после конца vector
, если capacity
достаточно велик (но size
меньше), когда вы вызываете data()
(или делаете *) 1017 *) и получить доступ к массиву через этот указатель. Я не думаю, что это будет неопределенным поведением, если вы используете POD-типы в векторе и не читаете их, прежде чем писать в них. Не пытайтесь делать это с типами классов, потому что элементы за size
вектора будут неинициализированы, и их использование будет UB.
Было бы бессмысленно делать это, потому что тогда, когда вы пытаетесь push_back
что-то в векторе или вызывать resize
для фактического обновления размера, оно перезапишет значения, которые вы подрывно записали в вектор. Просто используйте resize
или используйте конструктор vector(int)
, чтобы установить размер конструкции.