为什么priority_queue pop函数不会删除top元素?

时间:2019-07-13 11:39:17

标签: c++

当我使用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
}

为什么?

1 个答案:

答案 0 :(得分:0)

在空队列中呼叫top()undefined behaviour

在幕后,std::priority_queue<int>使用std::vector<int>保留元素。在队列上调用top()与在基础向量上调用front()具有相同的效果,而当向量(和队列)为空时,后者未定义:

https://en.cppreference.com/w/cpp/container/vector/front