Это шаблон для сжимаемого до соответствия в C ++ 03, где нет такой операции в интерфейсе векторного класса.Код создает копию (возможно, capacity
вектора будет близок к числу доступных элементов), а затем заменяет ее исходным вектором.После завершения выражения временный (который теперь содержит исходные буферы) отбрасывается, а память освобождается.
Рассмотрим:
std::vector<int> large;
large.reserve( 10000000 ); // might be the result of multiple push_back/erase
// large.capacity() >= 10000000
large.push_back( 1 ); // Make more explicit that 'large' might not be empty
std::vector<int>( large ).swap( large );
// large.capacity() is hopefully closer to 1
В C ++ 11 тип вектора былизменен, чтобы обеспечить shrink_to_fit
операцию, которая берет на себя эту роль.Важно отметить, что ни старый шаблон, ни shrink_to_fit
не являются операциями связывания, то есть нет гарантии на capacity
вектора после операции, отличной от capacity() >= size()
.