簡體   English   中英

通過std隊列迭代

[英]Iterating through std queue

我正在嘗試使用BOOST_FOREACH迭代std :: queue。 但是那個類中沒有迭代器導致我有一個錯誤:

std::queue<std::string> someList;
BOOST_FOREACH(std::string temp, someList)
{
   std::cout << temp;
}

>no matching function for call to begin(...)
>no type named ‘iterator’ in ‘class std::queue<std::basic_string<char> >’

我需要的結構如下:第一個到來,第一個消失。

std::deque支持在數據結構的開頭和結尾有效插入和刪除。 您可以使用push_backpop_front手動執行隊列操作。

默認情況下,隊列在內部使用deque。 它是一個只暴露隊列操作的包裝器(因此你不能迭代它)。 我不久前問了一個類似的問題 ,最好的答案讓我很好地了解了std::queue的實際用法。 一個人應該使用std::queue因為一個人需要一個隊列,但要清楚地表明只有類似隊列的操作在給定的數據結構上是合法的。 聽起來你需要更多的自由,所以請使用帶有O(1)插入的deque,list或其他結構,並在兩端移除。

你可以使用帶有push_front和pop_back的std :: list

std::queue是一個容器適配器。 它使用std::deque作為默認的底層容器。 無法訪問此容器,因此不以任何方式進行迭代。

最好的方法是使用std::dequestd::list並自己管理隊列行為。 可能會在它周圍提供自己的包裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM