簡體   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