【发布时间】:2019-05-16 21:16:51
【问题描述】:
我有很多使用队列的情况,队列的大小可能会增长到数百个。不幸的是,如果有必要的话,没有一键式的清空队列的解决方案。我想知道是否使用作用域队列进行交换,然后让作用域队列被销毁,是否会破坏任何内存分配/管理规则?
以下 sn-p 是我提议的示例。似乎有效,如果长期使用多次,则不确定结果。
#include <cstdlib>
#include <iostream>
#include <queue>
int
main()
{
std::queue<int> foo;
foo.push(10);
foo.push(20);
foo.push(30);
std::cout << "size of before foo: " << foo.size() << '\n';
{
std::queue<int> bar;
swap(foo, bar);
}
std::cout << "size of after foo: " << foo.size() << '\n';
return 0;
}
【问题讨论】:
-
应该没问题:
std::queue<>::swap()。但是既然你没有在std::queue<>的实例化中指定不同的容器,为什么不直接使用std::deque<>和std::deque::clear()呢? -
@Swordfish 据我了解,我正在使用的代码的原作者希望确保使用的队列结构强制 FIFO。就认证而言,这是一个安全问题。然而,他清除队列的解决方案是循环执行弹出直到为空。为了保持一致,我决定使用队列,而不是双端队列,但如果有必要,我正在寻找一种更清洁的方式来消除它。好问题。