侯捷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内部需要重新进行排序,排序时指针为空,挂在了自定义比较函数里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值