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;

//通过begin和end的方式实现打印出结果

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();

}

运行结果是:

STL之stack,queue,优先队列相关推荐

  1. [STL][C++]STACK QUEUE

    参考:http://www.cnblogs.com/mfryf/archive/2012/08/09/2629992.html stack stack 模板类的定义在<stack>头文件中 ...

  2. 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

    @Author:Runsen STL 中的栈容器是一种容器适配器.在栈容器中,元素在一端插入并在同一端删除. stack 为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>. ...

  3. C++ STACK Queue

    STL--stack/queue的使用方法 2010-01-05 17:36 stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的que ...

  4. [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程

    不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...

  5. C++STL的stack容器

    C++STL的stack容器 stack 基本概念 stack 常用接口 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 ...

  6. c++STL容器的Queue

    STL容器的Queue Queue简介 queue对象的默认构造 queue对象的拷贝构造与赋值 queue的数据存取 queue的大小 Queue简介 queue是队列容器,是一种"先进 ...

  7. C++ STL栈Stack的使用

    C++ STL stack 用法 Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这 ...

  8. stl中Priority Queues(优先队列)的基本用法

    博客搬家啦 blog.ma6174.com stl中Priority Queues(优先队列)的基本用法 C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. C++ Prio ...

  9. Stack/Queue与Vector/List的联系

    Vector:(顺序表[数组存储]) 1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去. 2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可.不会改动原有的空间.适用于多次 ...

最新文章

  1. 2021年大数据Spark(二十二):内核原理
  2. 利用PHPExcel转Excel柱形图
  3. FPGA配置模式(Altera版)
  4. 英语 interactive tutorial unary
  5. 1.20 Java8新特性:Effectively final
  6. 关闭oracle自动统计,禁用Oracle 11g的统计数据自动收集功能
  7. Qt5.8 Windows端 关于 Style Plugin Example 官方实例中的错误
  8. java 调用foxmail_Javamail简单使用案例
  9. C# 图解教程 第四章 类的基本概念
  10. HDU - 2018 母牛的故事
  11. sqlalchemy 初始化数据库
  12. WP与IOS与Android的后台机制相同与不同
  13. utuntu 12.04 安装 配置 JAVA JDK
  14. hdu 5083 Instruction (稍比较复杂的模拟题)
  15. mysql 数字正则_mysql 正则
  16. 将图片转成base64字符串并在JSP页面显示的Java代码
  17. html-canvas-绘制简单线条
  18. 职场常用的办公软件,操作很方便
  19. 27-TCP 协议(快重传与快恢复)
  20. 数字IC入门工具大全之 英特尔 Quartus Prime是什么?三个版本有什么区别

热门文章

  1. 电气论文实现:电力网络之 通过计算机得到电力网络节点阻抗矩阵(matlab)
  2. wxWidgets:wxWindowCreateEvent类用法
  3. wxWidgets:wxTreeCtrl概述
  4. boost::uuid::nil_generator相关的测试程序
  5. boost::multiprecision模块测试 cpp_dec_float_50 是否符合我们的 概念要求
  6. boost::mpl模块实现push_front相关的测试程序
  7. boost::graph模块实现读写graphml的测试程序
  8. ITK:斑点Blob
  9. ITK:创建派生内核DerivativeKernel
  10. DCMTK:将PDF文件封装为DICOM文件