打印优先级队列

kyl*_*ton 0 c++ priority-queue

我试图在C++中打印STL priority_queue,但是我在打印队列的所有元素时遇到问题.

priority_queue<Job, vector<Job>, greater<Job>> q = pq;
for(int i = 0; i <= q.size(); i++) {
    cout << q.top() << "\n";
    q.pop();
}
Run Code Online (Sandbox Code Playgroud)

但是,当列表中有一个或两个元素时使用此代码就可以了,但只要我输入三个或更多元素,它就会切断要打印的最后一个项目.我不太确定为什么会发生这种情况,但这让我感到困惑了一会儿.

for*_*818 5

for循环并不意味着用于条件为"动态"的情况.我的意思是:i <= q.size()当然是在每次迭代时进行评估,但每次迭代时q.size()也会发生变化.获得for循环并非不可能,但有一段时间更自然:

while (! q.empty() ) {
    cout << q.top() << "\n";
    q.pop();
}
Run Code Online (Sandbox Code Playgroud)

您的代码是错误的,因为您在每个迭代上递增i,同时q.size()在每次迭代时减少.