Так что я думаю, что вектор должен уменьшать свою емкость, когда его емкость намного больше, чем его размер.
Во-первых, в стандарте должно быть указано, что означает "емкость намного больше, чем ее размер".Это ограничило бы выбор, который реализации в настоящее время имеют по стратегии перераспределения.
Во-вторых, если для уменьшения емкости требуется перераспределение и перемещение всех оставшихся элементов.Это означает, что все итераторы могут быть аннулированы удалением, что ограничивает безопасное использование.
В настоящее время состояния стирания
Делает недействительными итераторы и ссылки на или послеточка стирания, включая итератор end()
.
В-третьих, вектор с такой же вероятностью снова достигнет своего верхнего водяного знака, как и в течение длительного времени.
Вы могли бы ухудшить использование для ряда допустимых сценариев, из-за сомнительного преимущества освобождения большого выделения.Современные системы виртуальной памяти прекрасно справляются со старыми выделениями, которые остаются строго дольше, чем необходимо.
Так есть ли условия для запуска уменьшения его емкости?
Да, shrink_to_fit
- это явный запрос сделать то, что вы хотите.Если вы do хотите перераспределить его в меньший размер, вы можете попросить об этом.Другие виды применения, которые могут быть повреждены в результате воздействия шин, не затрагиваются.