JHHK

欢迎来到我的个人网站
行者常至 为者常成

23、queue

目录

queue

void queue_constructor(){
    //构造方法
    queue<int> que;
    queue<int> que1 = queue<int>();
    queue<int> que2(que1);
    
    //队尾入队
    que1.push(1);
    que1.push(2);
    
    //队头出队
    que1.pop();
    
    //查看队头、队尾元素
    int front = que1.front();
    int back = que1.back();
    
    //size、empty
    int size = (int)que1.size();
    bool isempty = que1.empty();
    cout<<"size = "<<size<<"isempty = "<<isempty<<endl;
}
void queue_pointer(){
    //生成一个队列指针
       queue<int >* intQueue = new queue<int>();
       cout<<"intQueue = "<<intQueue<<endl;
       
       //从队尾入队
       intQueue->push(1);
       
       //从队头出队
       intQueue->pop();
       
       intQueue->push(1);
       intQueue->push(2);

       
       //队列元素个数
       size_t size = intQueue->size();
       cout<<"size = "<<size<<endl;
       
       //队列是否为空
       bool isEmpty = intQueue->empty();
       cout<<"isEmpty = "<<isEmpty<<endl;
       
       
       //查看队头元素
       int frontElement = intQueue->front();
       cout<<"frontElement = "<<frontElement<<endl;
       
       //查看队尾元素
       int backElement = intQueue->back();
       cout<<"backElement = "<<backElement<<endl;
       
       delete intQueue;
}

deque

void Deque_TestFunc(){
    deque<int> intDeque;
    
    intDeque.push_front(0);
    intDeque.push_back(1);
    
    intDeque.front();
    intDeque.back();
    
    intDeque.pop_front();
    intDeque.pop_back();
    
    intDeque.size();
    intDeque.empty();
}

PriorityQueue

void LCPriorityQueue_test1(){
    //对于基础类型 默认是大顶堆
    //等同于 priority_queue<int, vector<int>, less<int> > a;
    priority_queue<int> a;
    for (int i = 0; i < 5; i++){
        a.push(i);
    }
    while (!a.empty()){
        cout << a.top() << ' ';
        a.pop();
    }
    cout<<endl<<"------------------"<< endl;


    
    //大顶堆
    priority_queue<string> b;
    b.push("abc");
    b.push("abcd");
    b.push("cbd");
    while (!b.empty()){
        cout << b.top() << ' ';
        b.pop();
    }
    cout<<endl<<"------------------"<< endl;
    
    
    
    //这样就是小顶堆
    //这里一定要有空格,不然成了右移运算符↓
    priority_queue<int, vector<int>, greater<int> > c;
    for (int i = 0; i < 5; i++){
        a.push(i);
        c.push(i);
    }
    while (!c.empty()){
        cout << c.top() << ' ';
        c.pop();
    }
    cout << endl;
}
void LCPriorityQueue_test2(){
    priority_queue<pair<int, int> > que;
    pair<int, int> a(1, 2);
    pair<int, int> b(1, 3);
    pair<int, int> c(2, 5);
    que.push(a);
    que.push(b);
    que.push(c);
    while (!que.empty()){
        cout << que.top().first << ' ' << que.top().second << endl;
        que.pop();
    }
}
void LCPriorityQueue_test3(){
    //方法1
    struct tmp1{//运算符重载<
        int x;
        tmp1(int a) {x = a;}
        bool operator<(const tmp1& a) const{
            return x < a.x; //大顶堆
        }
    };

    //方法2
    struct tmp2{//重写仿函数
        bool operator() (tmp1 a, tmp1 b){
            return a.x < b.x; //大顶堆
        }
    };
    
    tmp1 a(1);
    tmp1 b(2);
    tmp1 c(3);
    priority_queue<tmp1> d;
    d.push(b);
    d.push(c);
    d.push(a);
    while (!d.empty()){
        cout << d.top().x <<endl;
        d.pop();
    }
    cout << endl;

    
    priority_queue<tmp1, vector<tmp1>, tmp2> f;
    f.push(c);
    f.push(b);
    f.push(a);
    while (!f.empty()){
        cout << f.top().x <<endl;
        f.pop();
    }
}

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.