我试图在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();
}
但是,当列表中有一个或两个元素时,使用此代码就可以了,但是一旦我输入三个或更多元素,它就会切断要打印的最后一项。我不太确定为什么会这样,但这已经让我感到困惑了。
答案 0 :(得分:5)
For循环arent确实旨在用于条件为“动态”的情况。我的意思是:i <= q.size()
当然会在每次迭代中进行评估,但是q.size()
也在每次迭代中都在变化。正确实现for循环并非不可能,但是有一段时间会更自然:
while (! q.empty() ) {
cout << q.top() << "\n";
q.pop();
}
您的代码是错误的,因为您在每个迭代中都增加i
,同时在每次迭代中都q.size()
减少。
答案 1 :(得分:0)
由于您正在循环中更改优先级队列的大小,因此代码无法正确运行。尝试以下代码:
priority_queue<Job, vector<Job>, greater<Job>> q = pq;
size_t size = pq.size();
for(int i = 0; i < size; ++i) {
cout << q.top() << "\n";
q.pop();
}