基于范围的for循环用于priority_queue

时间:2014-10-11 02:53:01

标签: c++ c++11 for-loop priority-queue

像这样定义我的priority_queue,

priority_queue<int> parts(start, start+N, less<int>());

以下代码无法编译

for(int t : parts){
    ...
}

这引出了我的问题:

在C ++ 11中,是否允许 std::priority_queue的循环范围?

通常,允许通过使用基于范围的for循环来迭代哪些结构?

我知道我可以做同样的事情:

while(!parts.empty()){
    cout << "Next element: " << parts.top() << endl;
    parts.pop();
}

是否可以通过队列进行迭代?

1 个答案:

答案 0 :(得分:7)

不,std::priority_queue不支持基于范围的for循环。

基于范围的for循环适用于具有begin()end()成员函数的数组和类。这包括C ++标准库中的所有容器以及std::string(及其basic_string表兄弟),但不包括容器适配器的堆栈,队列或优先级队列并且不公开迭代器。