Действительно ли очистка вектора влияет на его способность?
Я создаю экземпляр std::vector foo(1000).
foo.size() теперь 1000 и foo.capacity() также 1000.
Если я очистил вектор с помощью foo.clear(), size() теперь равен 0, но что такое capacity()? Стандарт говорит об этом?
Ответ 1
Нет, это не так. Емкость вектора никогда не уменьшается. Это не предусмотрено стандартом, но это так и в стандартных библиотечных реализациях VС++ и g++. Чтобы установить емкость достаточно, чтобы соответствовать размеру, используйте знаменитый трюк подкачки
vector<T>().swap(foo);
В стандарте С++ 11 вы можете сделать это более явно:
foo.shrink_to_fit();
Ответ 2
Чтобы очистить вектор и использовать как можно меньше емкости, используйте трюк подкачки:
std::vector<T>().swap(foo);
Это создает пустой вектор, свопит его внутренности с помощью foo, а затем уничтожает временный вектор, избавляясь от элементов, которые когда-то принадлежали foo, и оставляя foo, как если бы он был только что создан.
Ответ 3
В стандарте ничего не говорится о влиянии clear на capacity.
Ответ 4
Нет, ясное не влияет на его емкость(), оно остается тем же, даже если вы ясно. Если вы хотите сжать вектор в соответствии, вы можете использовать следующий трюк после вызова clear:
foo.swap(вектор (Foo));