我有要求:对于一个函数,我将输入作为数字流。我的意思是,该函数会在每次调用中始终以单个号码进行调用。我正在使用std::queue
存储数字流。我仅在满足某些条件时才需要处理一组收集的数字。如果不满足条件,我需要将所有元素放入队列,然后开始在其中存储新数字。为了清空队列,我找不到clear()
方法。所以我这样循环:
while(!q.empty())
q.pop();
我有一个清除std::queue
的有效算法
How do I clear the std::queue efficiently?
我的问题是:为什么std::queue
不支持clear()
功能?
由于std::deque
和std::vector
都支持clear()
方法,为std::queue
支持该技术难度是什么?
或者我的上述用例是否非常罕见,因此不受支持?
根据http://www.cplusplus.com/reference/stl/queue/,
队列被实现为容器适配器,这些类使用特定容器类的封装对象作为其基础容器,并提供一组特定的成员函数来访问其元素。
这意味着该队列使用一个已经存在的容器,并且实际上实际上是作为FIFO队列与此容器的接口。
这意味着不清除队列。如果需要清除队列,这意味着您实际上需要使用不是队列的对象,因此,您应该使用实际的基础容器类型,默认为双端队列。
除了已经说过的话,您可以很容易地清除队列:
queue<int> q;
...
q = queue<int>(); // Assign an empty queue
或在C ++ 11中]
q = {};
queue
只是某些基础容器的适配器,默认情况下为deque
,具有受限功能(如您在此处所述)。如果要使用完整功能,请使用基础的deque
而不是queue
。
将其添加到我不断增长的“使STL可读”功能列表中: