Выбор ответа Junior Контейнеры STL изнутри обновлено

reserve и resize

Вопрос

Чем v.reserve(100) отличается от v.resize(100) для пустого std::vector<int>?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: reserve только выделяет память, resize создаёт 100 нулей. reserve меняет только capacity: обращение v[5] после него UB, потому что элементов нет. resize меняет size, заполняя новые элементы значением по умолчанию (для int это 0) и при необходимости увеличивая ёмкость. - Разница принципиальная. -…

Варианты ответа

  1. reserve только выделяет память, resize создаёт 100 нулейправильный ответ
  2. Ничем: оба вызова создают 100 элементов со значением 0
  3. reserve создаёт элементы, resize только выделяет память
  4. resize не меняет ёмкость, а reserve меняет и размер тоже

Разбор

reserve меняет только capacity: обращение v[5] после него UB, потому что элементов нет. resize меняет size, заполняя новые элементы значением по умолчанию (для int это 0) и при необходимости увеличивая ёмкость.

  • Разница принципиальная.
  • Третий вариант перевёрнут.
  • resize до 100 элементов обязательно даст ёмкость не меньше 100.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.