Подтвердить что ты не робот

Действительно ли очистка вектора влияет на его способность?

Я создаю экземпляр std::vector foo(1000).

foo.size() теперь 1000 и foo.capacity() также 1000.

Если я очистил вектор с помощью foo.clear(), size() теперь равен 0, но что такое capacity()? Стандарт говорит об этом?

4b9b3361

Ответ 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));