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

问题描述 投票:28回答:4

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

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

我有一个清除std::queue的有效算法

How do I clear the std::queue efficiently?

我的问题是:为什么std::queue不支持clear()功能?

由于std::dequestd::vector都支持clear()方法,为std::queue支持该技术难度是什么?

或者我的上述用例是否非常罕见,因此不受支持?

c++ visual-studio visual-c++ stl
4个回答
23
投票

根据http://www.cplusplus.com/reference/stl/queue/

队列被实现为容器适配器,这些类使用特定容器类的封装对象作为其基础容器,并提供一组特定的成员函数来访问其元素。

这意味着该队列使用一个已经存在的容器,并且实际上实际上是作为FIFO队列与此容器的接口。

这意味着不清除队列。如果需要清除队列,这意味着您实际上需要使用不是队列的对象,因此,您应该使用实际的基础容器类型,默认为双端队列。


27
投票

除了已经说过的话,您可以很容易地清除队列:

queue<int> q;
...
q = queue<int>(); // Assign an empty queue

或在C ++ 11中]

q = {};

5
投票

queue只是某些基础容器的适配器,默认情况下为deque,具有受限功能(如您在此处所述)。如果要使用完整功能,请使用基础的deque而不是queue


2
投票

将其添加到我不断增长的“使STL可读”功能列表中:

© www.soinside.com 2019 - 2024. All rights reserved.