打印优先级队列

时间:2018-10-24 18:02:25

标签: 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();
}

但是,当列表中有一个或两个元素时,使用此代码就可以了,但是一旦我输入三个或更多元素,它就会切断要打印的最后一项。我不太确定为什么会这样,但这已经让我感到困惑了。

2 个答案:

答案 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();
}