Читая std::vector
ссылки я понял, чтоКонтроля над стандом :: вектор перераспределением
вызова
insert
при достижении максимальной емкости приведет к перераспределению вstd::vector
(вызывая итератор недействительности), потому что новая память выделенных для него с большей пропускной способностью. Цель состоит в том, чтобы сохранить гарантию на непрерывные данные.До тех пор, пока я придерживаюсь максимальной емкости
insert
, это не вызовет (и итераторы будут неповреждены).
Мой вопрос заключается в следующем:
Когда reserve
вызывается автоматически insert
, есть ли способ, чтобы контролировать, сколько новая память должна быть зарезервирована?
Предположим, что у меня есть вектор с начальной емкостью 100 и, когда максимальная емкость ударяется, я хочу выделить дополнительные 20 байтов.
Возможно ли это?
Я не понимаю, как это разумно. Вызов 'reserve()' перераспределит все элементы, а затем вы получите другой набор копий при вызове 'insert()'. Кроме того, 'reserve()' гарантирован только для того, чтобы зарезервировать * как минимум * запрошенный размер и может фактически зарезервировать больше. – jrok
Вопрос в том, как я могу его контролировать. Это самый контроль, который вы можете получить, и даже если он выделяет больше, вы никогда не получаете распределения, которые не попадают в этот оператор if, даже если они могут быть больше, чем вы просили. – Flexo
Моя точка зрения, почему бы не позволить 'insert()' выполнять свою работу? – jrok