显然,有两种最明显的清除方法 std::queue
:与空对象交换和分配给空对象。
我建议使用赋值,因为赋值可以更快,更易读,更明确。
我使用下面的简单代码测量了性能,发现在C ++ 03版本中进行交换比分配给空对象要慢70-80%。但是,在C ++ 11中,性能没有差异。无论如何,我会去做作业。
#include <algorithm>
#include <ctime>
#include <iostream>
#include <queue>
#include <vector>
int main()
{
std::cout << "Started" << std::endl;
std::queue<int> q;
for (int i = 0; i < 10000; ++i)
{
q.push(i);
}
std::vector<std::queue<int> > queues(10000, q);
const std::clock_t begin = std::clock();
for (std::vector<int>::size_type i = 0; i < queues.size(); ++i)
{
// OK in all versions
queues[i] = std::queue<int>();
// OK since C++11
// std::queue<int>().swap(queues[i]);
// OK before C++11 but slow
// std::queue<int> empty;
// std::swap(empty, queues[i]);
}
const double elapsed = double(clock() - begin) / CLOCKS_PER_SEC;
std::cout << elapsed << std::endl;
return 0;
}
deque
支持清除