[英]Why doesn't std::priority_queue have a clear() member function
[英]Why doesn't std::queue support a clear() function?
我有要求:对于一个函数,我将输入作为数字流。 我的意思是,该函数在每次调用中都会继续使用单个号码进行调用。 我正在使用std::queue
来存储数字流。 只有在满足某些条件时,我才需要处理一组收集的数字。 如果条件不满足,我需要将所有元素放入队列,然后开始在其中存储新数字。 为了清空队列,我找不到clear()
方法。 所以我是这样循环的:
while(!q.empty())
q.pop();
我得到了一个有效的算法来清除std::queue
在
我的问题是:为什么std::queue
支持clear()
函数?
由于std::deque
和std::vector
都支持clear()
方法,那么为std::queue
支持它的技术难点是什么?
或者我的上述用例非常罕见,因此不受支持?
除了已经说过的内容之外,您还可以非常轻松地清除队列:
queue<int> q;
...
q = queue<int>(); // Assign an empty queue
或在 C++11 中
q = {};
根据http://www.cplusplus.com/reference/stl/queue/ ,
队列被实现为容器适配器,这些类使用特定容器类的封装对象作为其底层容器,提供一组特定的成员函数来访问它的元素。
这意味着队列使用已经存在的容器,并且实际上是作为 FIFO 队列的该容器的接口。
这意味着队列不应该被清除。 如果你需要清除一个队列,这意味着你实际上需要使用一个不是队列的对象,因此你应该使用实际的底层容器类型,默认情况下是一个双端队列。
queue
只是一些底层容器的适配器,默认情况下是deque
,具有受限功能(如您在此处所述)。 如果您想要完整的功能,请使用基础deque
而不是queue
。
将此添加到我不断增长的“使 STL 可读”功能列表中:
template <typename T>
void Clear(std::queue<T>& Queue)
{
Queue = std::queue<T>(); // Assign to empty queue
}
它只是对 sellibitze 出色答案的一个包装,但这意味着我不必在每次使用该技术时都添加评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.