当我使用pop删除priority_queue元素时,发现仍可以通过顶部函数对其进行访问。我的gcc版本为gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
。
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> l;
l.push(1);
cout << l.top() << endl; // 1
l.pop();
cout << l.top() << endl; // 1
}
为什么?
答案 0 :(得分:0)
在空队列中呼叫top()
是undefined behaviour。
在幕后,std::priority_queue<int>
使用std::vector<int>
保留元素。在队列上调用top()
与在基础向量上调用front()
具有相同的效果,而当向量(和队列)为空时,后者未定义: