打印优先队列

Printing a 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();
}

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

由于您要在循环中更改优先级队列的大小,因此代码 运行 不正确。试试下面的代码:

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

For 循环并不真正用于条件为 "dynamic" 的情况。我的意思是:i <= q.size() 当然会在每次迭代时进行评估,但是 q.size() 也会在每次迭代时发生变化。把for循环弄对也不是不可以,但是一个while更自然:

while (! q.empty() ) {
    cout << q.top() << "\n";
    q.pop();
}

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