打印优先队列
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()
。
我正在尝试用 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()
。