Ни resize (), ни clear () не работают. .capacity()
вектора гарантированно будет по крайней мере таким же большим, как ток size()
вектора, и гарантированно будет по крайней мере таким же большим, как емкость reserve()
d. Кроме того, это. capacity()
не сжимается, поэтому оно также, по крайней мере, такое же большое, как любой предыдущий size()
или reserve()
.
Теперь, .capacity()
вектора - это просто память, которую он зарезервировал. Часто не вся эта память содержит объекты. Изменение размера удаляет объекты, но не перезапускает память. Вектор может перезапускать свой буфер памяти только при выделении большего буфера.
Трюк подкачки работает путем копирования всех объектов в меньший, более подходящий буфер памяти. После этого оригинальный буфер памяти может быть переработан. Это нарушает предыдущее утверждение, что буфер памяти вектора может только расти. Однако с помощью трюка со свопом у вас временно есть 2 векторов.