Может ли перераспределение произойти с вектором до того, как размер достигнет зарезервированной емкости?

58
8

Предположим, что я делаю v.reserve(1000000); Я v.size() что перераспределение не произойдет до того, как первый раз v.size() будет равно 1000000?

спросил(а) 2017-05-09T15:49:00+03:00 3 года, 4 месяца назад
1
Решение
69

Перераспределения не будет.

Это не было бы законным, потому что вставка в vector с достаточной емкостью не отменяет итераторов (кроме end итератора) и ссылок на указанный vector.

ответил(а) 2017-05-09T15:53:00+03:00 3 года, 4 месяца назад
41

Не должно быть никаких новых распределений, если вы не достигнете зарезервированного размера.

Однако вы можете прочитать эту интересную статью об оптимизации "стандартной библиотеки" для вашей памяти.

ответил(а) 2017-05-09T16:03:00+03:00 3 года, 4 месяца назад
40

От 1:

Если n больше текущей емкости вектора, функция заставляет контейнер перераспределять его хранилище, увеличивая его емкость до n (или больше).

Во всех других случаях вызов функции не вызывает перераспределения, и емкость вектора не изменяется.

где n - аргумент элементов для резервирования размера.

ответил(а) 2017-05-09T15:54:00+03:00 3 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема