STL之stack,queue,优先队列

简介:  1.stack,size(),empty(),pop()函数 #include<stack> #include <iostream>   using namespace std;   //通过push()方法入栈 //通过size()方法求栈中元素的个数 //通过empty()方法判断栈是否为空


1.stack,size(),empty(),pop()函数

#include<stack>

#include <iostream>

 

using namespace std;

 

//通过push()方法入栈

//通过size()方法求栈中元素的个数

//通过empty()方法判断栈是否为空

//通过pop()求栈中最顶端的元素

void main()

{

    int num;

    cin >> num;

    stack<int> mystack;

    for (; num; num /= 2)

    {

        mystack.push(num % 2);

        std::cout << "当前元素个数" << mystack.size() << endl;

    }

    while (!mystack.empty())

    {

        int num = mystack.top();

        std::cout << num << " ";

        mystack.pop();

    }

 

    cin.get();

    cin.get();

}

运行结果:

2.queue,队列

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

 

void main()

{

    queue<char *> myq;

    myq.push("calc");

    myq.push("notepad");

    myq.push("tasklist");

    myq.push("mspaint");

 

    while (!myq.empty())

    {

        char *p = myq.front();//获取

        system(p);

        myq.pop();

    }

 

    cin.get();

    //运行结果是:

    //弹出计算器

    //弹出notepad

    //显示进程

    //弹出mspaint

}

案例2

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

 

void main()

{

    deque<int> mydq;

    mydq.push_back(1);

    mydq.push_back(11);

    mydq.push_back(111);

    mydq.push_back(1111);

    mydq.push_back(11111);

    mydq.push_front(123);

    mydq.insert(mydq.begin() + 3, 100);//插入

 

    //类似数组的方式打印出结果

    for (int i = 0; i < mydq.size(); i++)

    {

        std::cout << mydq[i] << std::endl;

    }

 

    std::cout << "------------------" << std::endl;

 

    //通过beginend的方式实现打印出结果

    auto ib = mydq.begin();

    auto ie = mydq.end();

    for (; ib != ie; ib++)

    {

        std::cout << *ib << std::endl;

    }

 

    cin.get();

}

运行结果:

案例3

关于队列的erase(),删除某个元素

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

//删除元素

void main()

{

    deque<int> mydq;

    mydq.push_back(1);

    mydq.push_back(11);

    mydq.push_back(111);

    mydq.push_back(1111);

    mydq.push_back(11111);

    mydq.push_back(123);

    //删除头部元素

    mydq.erase(mydq.begin());

    //删除尾部元素

    mydq.erase(mydq.end() - 1);

 

    auto ib = mydq.begin();

    auto ie = mydq.end();

    for (; ib != ie;ib++)

    {

        std::cout << *ib << std::endl;

    }

 

    cin.get();

}

运行结果:

案例4

关于pop_front()pop_back()

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

//删除元素

void main()

{

    deque<int> mydq;

    mydq.push_back(1);

    mydq.push_back(11);

    mydq.push_back(111);

    mydq.push_back(1111);

    mydq.push_back(11111);

    mydq.push_back(123);

    //头部弹出

    mydq.pop_front();

    //尾部弹出

    mydq.pop_back();

 

    auto ib = mydq.begin();

    auto ie = mydq.end();

    for (; ib != ie;ib++)

    {

        std::cout << *ib << std::endl;

    }

 

    cin.get();

}

运行结果:

案例5

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

//删除元素

void main()

{

    deque<int> mydq;

    mydq.push_back(1);

    mydq.push_back(11);

    mydq.push_back(111);

    mydq.push_back(1111);

    mydq.push_back(11111);

    mydq.push_back(123);

    //清空

    mydq.clear();

 

    auto ib = mydq.begin();

    auto ie = mydq.end();

    for (; ib != ie;ib++)

    {

        std::cout << *ib << std::endl;

    }

 

    cin.get();

}

运行结果:

案例6

swap实现两个栈中的内容交换

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

//swap()两个栈中的数据交换

void main()

{

    deque<int> mydq1;

    mydq1.push_back(1);

    mydq1.push_back(11);

    mydq1.push_back(111);

    mydq1.push_back(1111);

    mydq1.push_back(11111);

 

    deque<int> mydq2;

    mydq2.push_back(2);

    mydq2.push_back(21);

    mydq2.push_back(211);

    mydq2.push_back(2111);

    mydq2.push_back(21111);

 

    mydq1.swap(mydq2);

 

    {

        auto ib = mydq1.begin();

        auto ie = mydq1.end();

        for (; ib != ie; ib++)

        {

            std::cout << *ib << std::endl;

        }

    }

 

    std::cout << "---------------" << std::endl;

 

    {

        auto ib = mydq2.begin();

        auto ie = mydq2.end();

        for (; ib != ie;ib++)

        {

            std::cout << *ib << std::endl;

        }

    }

 

    cin.get();

}

案例7.

关于front(),back(),max_size(),size()

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include <deque> //双端队列

 

//提供了二维动态数组的功能,头部,尾部,任意操作

 

using namespace std;

//swap()两个栈中的数据交换

void main()

{

    deque<int> mydq1;

    mydq1.push_back(1);

    mydq1.push_back(11);

    mydq1.push_back(111);

    mydq1.push_back(1111);

    mydq1.push_back(11111);

 

    //第一个元素

    std::cout << mydq1.front() << std::endl;

    //最后一个元素值

    std::cout << mydq1.back() << std::endl;

    //栈所允许的最大个数

    std::cout << mydq1.max_size() << std::endl;

    //当前栈的个数

    std::cout << mydq1.size() << std::endl;

 

    cin.get();

}

运行结果:

3.优先队列

优先队列实现的参数的结果是有序的

#include <queue>

#include <iostream>

 

using namespace std;

//优先队列实现了自动排序功能

void main()

{

    priority_queue<int> myq;

    myq.push(10);

    myq.push(12);

    myq.push(11);

    myq.push(110);

    myq.push(101);//自动排序

 

    while (!myq.empty())

    {

        std::cout << myq.top() << endl;

        myq.pop();

    }

 

    cin.get();

}

运行结果:

4.优先队列之2

案例:

#include <queue>

#include <iostream>

#include <string>

#include <stdlib.h>

#include <list>

 

#include<deque>//双端队列

using namespace std;

struct student

{

    int age;

    string name;

};

 

//这里按照年龄比较大小

struct stuless

{

    bool operator()(const student &s1, const student &s2)

    {

        return s1.age < s2.age;

    }

};

 

void main()

{

                //类名 存储方式是deque方式 按照年龄排序

    priority_queue<student, deque<student>, stuless> myq;

    student s1;

    s1.age = 10;

    s1.name = "谭胜";

    student s2;

    s2.age = 9;

    s2.name = "熊飞";

    student s3;

    s3.age = 19;

    s3.name = "peng";

    myq.push(s1);

    myq.push(s2);

    myq.push(s3);

    while (!myq.empty())

    {

        std::cout << myq.top().age << myq.top().name << endl;

        myq.pop();

    }

    cin.get();

}

运行结果是:

 

目录
相关文章
|
25天前
|
存储 设计模式 算法
stack和queue及优先级队列和适配器(包括deque)的介绍
stack和queue及优先级队列和适配器(包括deque)的介绍
26 1
|
3月前
|
容器
STL_queue
STL_queue
17 1
|
7天前
|
C++ 容器
【C++初阶】STL详解(六)Stack与Queue的介绍与使用
【C++初阶】STL详解(六)Stack与Queue的介绍与使用
12 1
|
1月前
|
编译器 C++ 容器
STL常用之vector,list,stack,queue,deque总结与对比
STL常用之vector,list,stack,queue,deque总结与对比
|
2月前
|
存储 C++ 容器
STL--stack、queue实现
STL--stack、queue实现
|
8月前
|
存储 设计模式 C++
C++ STL stack & queue
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
|
5月前
|
设计模式 存储 C++
C++ Stack&queue&deque
C++ Stack&queue&deque
|
6月前
|
存储 算法 C++
『C++ - STL』之优先级队列( priority_queue )
『C++ - STL』之优先级队列( priority_queue )
|
10月前
|
设计模式 C++ 容器
C++【STL】之stack和queue学习
C++ STL stack和queue常用接口和模拟实现详细讲解,干货满满!
82 0
C++【STL】之stack和queue学习
|
10月前
|
设计模式 C++ 容器
C++STL——stack与queue
C++STL——stack与queue