迭代通过std队列
我试图使用BOOST_FOREACH迭代通过std ::队列。但是,是不是在这个类的原因迭代器我有一个错误:迭代通过std队列
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_back
和pop_front
手动执行队列操作。
默认情况下,队列内部使用deque。这是一个只公开队列操作的包装器(因此为什么不能迭代它)。我回过头问了一个similar question,最好的答案让我很好地洞察了std::queue
的真实用途。一个应该使用std::queue
不是因为需要一个队列,而是为了明确只有队列类操作在给定的数据结构上是合法的。这听起来像你需要更多的自由,所以去与deque,列表或其他结构与O(1)插入和删除两端。
我认为queue比deque更简单(perf + mem)。但是,在你的答案(并通过头文件验证)后,我认为无论是队列还是双队列,perf和memory都没有区别,除了Queue情况下对某些操作的限制。 – Makesh 2017-02-23 07:32:07
可以使用 的std ::清单,push_front和pop_back
std::queue
是一个容器适配器。它使用std::deque
作为默认的基础容器。访问这个容器是不可能的,因此不以任何方式迭代。
最好的方法是使用std::deque
或std::list
并自己管理队列行为。可能提供你自己的包装。
可能的重复:http://stackoverflow.com/questions/1259099/ – 2010-06-01 14:39:47