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循环并不意味着用于条件为"动态"的情况.我的意思是:i <= q.size()当然是在每次迭代时进行评估,但每次迭代时q.size()也会发生变化.获得for循环并非不可能,但有一段时间更自然:
while (! q.empty() ) {
cout << q.top() << "\n";
q.pop();
}
Run Code Online (Sandbox Code Playgroud)
您的代码是错误的,因为您在每个迭代上递增i,同时q.size()在每次迭代时减少.