首页 > 代码库 > STL之stack,queue,优先队列
STL之stack,queue,优先队列
1.stack,size(),empty(),pop()函数
#include<stack>
#include<iostream>
usingnamespacestd;
//通过push()方法入栈
//通过size()方法求栈中元素的个数
//通过empty()方法判断栈是否为空
//通过pop()求栈中最顶端的元素
voidmain()
{
intnum;
cin >>num;
stack<int>mystack;
for (;num;num /= 2)
{
mystack.push(num % 2);
std::cout << "当前元素个数" << mystack.size() << endl;
}
while (!mystack.empty())
{
intnum =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
voidmain()
{
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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
voidmain()
{
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 (inti = 0;i <mydq.size();i++)
{
std::cout << mydq[i] << std::endl;
}
std::cout << "------------------" <<std::endl;
//通过begin和end的方式实现打印出结果
autoib =mydq.begin();
autoie =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
//删除元素
voidmain()
{
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);
autoib =mydq.begin();
autoie =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
//删除元素
voidmain()
{
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();
autoib =mydq.begin();
autoie =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
//删除元素
voidmain()
{
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();
autoib =mydq.begin();
autoie =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
//swap()两个栈中的数据交换
voidmain()
{
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);
{
autoib =mydq1.begin();
autoie =mydq1.end();
for (;ib !=ie;ib++)
{
std::cout << *ib <<std::endl;
}
}
std::cout << "---------------" <<std::endl;
{
autoib =mydq2.begin();
autoie =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>//双端队列
//提供了二维动态数组的功能,头部,尾部,任意操作
usingnamespacestd;
//swap()两个栈中的数据交换
voidmain()
{
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>
usingnamespacestd;
//优先队列实现了自动排序功能
voidmain()
{
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>//双端队列
usingnamespacestd;
structstudent
{
intage;
stringname;
};
//这里按照年龄比较大小
structstuless
{
bool operator()(conststudent &s1,conststudent &s2)
{
returns1.age < s2.age;
}
};
voidmain()
{
//类名 存储方式是deque方式 按照年龄排序
priority_queue<student,deque<student>,stuless>myq;
students1;
s1.age = 10;
s1.name = "谭胜";
students2;
s2.age = 9;
s2.name = "熊飞";
students3;
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,优先队列