Какой способ лучше/быстрее в C++ 11, чтобы очистить контейнер (например, очереди):C++ 11 очистка контейнера с станд :: своп против оператора = (T &&)
void clean()
{
std::queue<int> empty_q;
std::swap(q_to_clear, empty_q);
}
или с помощью оператор = (Q & &) (быстрее, чем своп?)
void clean()
{
q_to_clear = std::queue<int>{};
}
Или это по существу то же самое?
Что такое использование * компактной память * версии? ... ах, вы делаете копию 'q_to_compact'. Будет ли '{}' сделать это более понятным или вы боитесь проблем с списком инициализаторов? – Yakk
@Yakk - это освобождение избыточной памяти. Политика распределения по умолчанию для 'std :: vector' заключается в том, чтобы увеличить емкость на x2, когда она исчерпана, поэтому в итоге может быть потеряна половина памяти. Таким образом, вы создаете временный вектор из существующего (этот вектор будет иметь емкость, точно соответствующую размеру), swap - это кишка с вектором, который вы хотите сжать, и позволить ему выйти из области видимости. – bobah