繁体   English   中英

为什么 std::queue 不支持 clear() 函数?

[英]Why doesn't std::queue support a clear() function?

我有要求:对于一个函数,我将输入作为数字流。 我的意思是,该函数在每次调用中都会继续使用单个号码进行调用。 我正在使用std::queue来存储数字流。 只有在满足某些条件时,我才需要处理一组收集的数字。 如果条件不满足,我需要将所有元素放入队列,然后开始在其中存储新数字。 为了清空队列,我找不到clear()方法。 所以我是这样循环的:

while(!q.empty())
    q.pop();

我得到了一个有效的算法来清除std::queue

如何有效地清除 std::queue?

我的问题是:为什么std::queue支持clear()函数?

由于std::dequestd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM