5、stack、queue 和priority_queue 模板参数 什么是类型 运算符重载 自定义类型的优先级队列

stack和queue:只能在一端进行操作

stack

 

emplace

改进版的insert

empty

对栈判空

pop

出栈

push

入栈

size

查看栈中元素的个数

top

获取栈顶元素

swap

交换两个栈

 

最关键的是二叉树的层序遍历

https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

用队列实现栈

https://leetcode-cn.com/problems/implement-stack-using-queues/

二叉树的层平均值

https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/

 

 

priority_queue

其实就是堆大堆和小堆

大堆---------对顶元素最大---采用的比较为默认的less--->>是小于比较

小堆---------堆顶元素最小---采用的比较是greater是大于比较

底层就是动顺序表

template ,

class Compare = less > class priority_queue;

模板的参数

class T 

这个参数就是模板中数据类型的参数

class Container = vector

模板中存放数据的容器,默认的类型是vetor

class Compare = less > class priority_queue;

这里的就是存放的比较方法,默认是less比较法-->创建出来的就是大堆

 

 

默认小堆

priority_queue<int> q1;

大堆

priority_queue<int> q2(v.begin(), v.end());

小堆

priority_queue <int, vector<int>, greater<int>> q3(v.begin(), v.end());

#include 

#include   777



using namespace std;

class Data{

public:

    Data(int year = 2019, int month = 5, int day =  18)

         :_year(year)

         , _month(month)

         , _day(day)

    {}

    bool operator <(const Data& d)const { //重载 <  号注意后面的参数括号中的this指针

         return _day < d._day;   //私有成员变量不能在类外使用,只能在类中使用

    }

private:

    int _year;

    int _month;

    int _day;

};

typedef bool(*compare)(const Data* pleft, const Data*  pRight);  //定义一个函数类型

// 1.函数指针解决自定义类型的比较方法

bool Less(const Data* pleft, const Data* pRight){   //传入的日期类型的对象

    return *pleft < *pRight;

}

int main(){

#if 0

    priority_queue q1;

    vector v{ 3, 4, 6, 3, 5, 2, 0, 8 };

    priority_queue q2(v.begin(), v.end());

    priority_queue , greater>  q3(v.begin(), v.end());

#endif

    Data d1(2019, 6, 27);

    Data d2(2019, 6, 28);

    Data d3(2019, 6, 29);

    Data d4(2019, 6, 30);

    priority_queue, compare>  q(Less);

        // 初始化对象的构造函数

        //explicit priority_queue (const Compare& comp =  Compare(),

        //                             const Container&  ctnr = Container());

    q.push(&d1);

    q.push(&d2);

    q.push(&d3);

    q.push(&d4);

    system("pause");

    return 0;

}



//什么是类型 :
// typedef bool(*compare)(const Data* pleft, const Data*  pRight);  定义一个compare* 的函数类型

        Data*、    vector、   cmppare

模板参数列表中都是类型

 

 

 

bool operator <(const Data& d)const { //重载 <  号注意后面的参数括号中的this指针

return _day < d._day;   //私有成员变量不能在类外使用,只能在类中使用

 

 

 

 

 

 

 

你可能感兴趣的:(C++)