STL之stack,queue,优先队列
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,优先队列相关推荐
- [STL][C++]STACK QUEUE
参考:http://www.cnblogs.com/mfryf/archive/2012/08/09/2629992.html stack stack 模板类的定义在<stack>头文件中 ...
- 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map
@Author:Runsen STL 中的栈容器是一种容器适配器.在栈容器中,元素在一端插入并在同一端删除. stack 为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>. ...
- C++ STACK Queue
STL--stack/queue的使用方法 2010-01-05 17:36 stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的que ...
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...
- C++STL的stack容器
C++STL的stack容器 stack 基本概念 stack 常用接口 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 ...
- c++STL容器的Queue
STL容器的Queue Queue简介 queue对象的默认构造 queue对象的拷贝构造与赋值 queue的数据存取 queue的大小 Queue简介 queue是队列容器,是一种"先进 ...
- C++ STL栈Stack的使用
C++ STL stack 用法 Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这 ...
- stl中Priority Queues(优先队列)的基本用法
博客搬家啦 blog.ma6174.com stl中Priority Queues(优先队列)的基本用法 C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. C++ Prio ...
- Stack/Queue与Vector/List的联系
Vector:(顺序表[数组存储]) 1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去. 2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可.不会改动原有的空间.适用于多次 ...
最新文章
- 2021年大数据Spark(二十二):内核原理
- 利用PHPExcel转Excel柱形图
- FPGA配置模式(Altera版)
- 英语 interactive tutorial unary
- 1.20 Java8新特性:Effectively final
- 关闭oracle自动统计,禁用Oracle 11g的统计数据自动收集功能
- Qt5.8 Windows端 关于 Style Plugin Example 官方实例中的错误
- java 调用foxmail_Javamail简单使用案例
- C# 图解教程 第四章 类的基本概念
- HDU - 2018 母牛的故事
- sqlalchemy 初始化数据库
- WP与IOS与Android的后台机制相同与不同
- utuntu 12.04 安装 配置 JAVA JDK
- hdu 5083 Instruction (稍比较复杂的模拟题)
- mysql 数字正则_mysql 正则
- 将图片转成base64字符串并在JSP页面显示的Java代码
- html-canvas-绘制简单线条
- 职场常用的办公软件,操作很方便
- 27-TCP 协议(快重传与快恢复)
- 数字IC入门工具大全之 英特尔 Quartus Prime是什么?三个版本有什么区别
热门文章
- 电气论文实现:电力网络之 通过计算机得到电力网络节点阻抗矩阵(matlab)
- wxWidgets:wxWindowCreateEvent类用法
- wxWidgets:wxTreeCtrl概述
- boost::uuid::nil_generator相关的测试程序
- boost::multiprecision模块测试 cpp_dec_float_50 是否符合我们的 概念要求
- boost::mpl模块实现push_front相关的测试程序
- boost::graph模块实现读写graphml的测试程序
- ITK:斑点Blob
- ITK:创建派生内核DerivativeKernel
- DCMTK:将PDF文件封装为DICOM文件