侯捷STL源码分析:priority_queue 读书笔记

  1. 概述
    priority_queue是一个可以自动排序的queue,queue的特性是只能底入头出。
  2. 成员函数
    bool empty()
    size_type size()
    const_reference top()
    void push(const value_type& x)//先将元素插入到底层的最底端,然后重新排序
    void pop()//先进行排序,然后在弹出顶端

  3. 没有迭代器

    4、代码段


#include <queue>
#include <iostream>
#include <algorithm>

using namespace std;
void test_pro_dequeue()
{
    int ia[9] = {0,1,2,3,4,8,9,3,5};
    std::priority_queue<int> ipq(ia, ia+9);
    cout << "size" << ipq.size() << endl; //size = 9

    for(int i = 0; i < ipq.size() ; i++)
    {
        cout << ipq.top() << ' ';//9 9 9 9 9 9 9 9 9 
    }
    cout << endl;

    while(!ipq.empty()){
     cout << ipq.top() << ' '; //9 8 5 4 3 3 2 1 0
     ipq.pop();
    }
    cout << endl;
}


int main() {
    test_pro_dequeue(); 
    system("pause");
    return 0;
}

5、踩到的坑
别人留给自己的坑
定义priority_queue可以自定义比较函数
5.1问题出现的条件:
5.1.1、priority_queue内存储的是指针(比较函数当然也是使用指针(指向的内容)进行排序)
5.1.2、当指针指向的内容被释放后,然后再去调用priority_queue的pop,进行删除,此时程序挂掉
5.2问题出现的原因是:
调用pop的时候,pop内部需要重新进行排序,排序时指针为空,挂在了自定义比较函数里。

猜你喜欢

转载自blog.csdn.net/weixin_37098881/article/details/81362715