在c ++ 11中以哪种方式更好/更快地清除容器(例如队列):
void clean()
{
std::queue<int> empty_q;
std::swap(q_to_clear, empty_q);
}
或使用operator =(Q&amp;&amp;)(比交换更快?)
void clean ()
{
q_to_clear = std::queue<int>{};
}
或者它基本上是一样的吗?
答案 0 :(得分:4)
它可能几乎没有任何区别,但移动分配要求临时源队列在移动后需要建立一个新的空状态,这可以避免交换。您可以按如下方式编写交换:
std::queue<int>().swap(q_to_clear);
答案 1 :(得分:2)
C++11
- 提升至极端:
decltype(q_to_clear)().swap(q_to_clear);
也适用于其他std::
容器。
和紧凑内存语法一样酷:
decltype(q_to_compact)(q_to_compact).swap(q_to_compact);