STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)
1.FIFO队列
std::queue就是普通意思上的FIFO队列在STL中的模版。
1.1主要的方法有:
(1)T front():访问队列的对头元素,并不删除对头元素
(2)T back():访问队列的末尾元素,并不删除末尾元素
(3)void pop():删除对头元素。
(4)void push(T):元素入队
1.2代码实例
#include <iostream>
#include <queue>
using namespace std;
int main()
{
std::queue<int> myqueue;
myqueue.push(); //入队
myqueue.push();
myqueue.push(); cout<<"队列末尾元素:"<<myqueue.back()<<endl;
cout<<"队列元素出队顺序如下:";
while(!myqueue.empty()) //判空
{
cout<<myqueue.front()<<" "; //访问队列头元素
myqueue.pop(); //队列头元素出对
}
return ;
}
程序输出:
2.优先队列
std::priority_queue就是优先级队列在STL中的模版,在优先队列中,优先级高的元素先出队列,内部使用堆实现(大顶堆,同Top K问题)。
2.1 模版原型:priority_queue<T,Sequence,Compare>
T:存放容器的元素类型
Sequence:实现优先级队列的底层容器,默认是vector<T>
Compare:用于实现优先级的比较函数,默认是functional中的less<T>
2.2主要对方法有:
(1)T top():访问队列的对头元素,并不删除对头元素
(2)void pop():删除对头元素。
(3)void push(T):元素入队
2.3使用默认参数的优先队列实例
#include <iostream>
#include <queue>
int main()
{
std::priority_queue<int> mypq;
mypq.push(); //入队
mypq.push();
mypq.push();
mypq.push();
std::cout << "Popping out elements...";
while (!mypq.empty())
{
std::cout << ' ' << mypq.top(); //读取队列头元素
mypq.pop(); //对头元素出队列
}
std::cout << '\n';
return ;
}
程序输出:
2.4使用自定义的比较函数的优先队列实例
标准库默认使用元素类型的<操作符来确定它们之间的优先级关系,大的优先级高,优先输出。我们只要重写<操作符就可以啦(可以像C语言的qsort()一样,可以写比较复杂的比较函数)。
下面的实例中,重写<操作符,使得数字小的数,优先级大。
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
struct Node
{
int f;
bool operator<(const Node& node)const
{
return f<node.f? false :true ; //小的数字,可以让它不小
}
};
class cmp
{
public:
bool operator()( const Node & n1, const Node & n2) const
{
return n1<n2; //Node类已经重写了<运算符
}
};
int main()
{
priority_queue< Node,vector<Node>,cmp > q;
Node n1,n2,n3,n4; n1.f = ; n2.f = ;
n3.f = ; n4.f = ; q.push(n1); q.push(n2);
q.push(n3); q.push(n4);
while(!q.empty())
{
cout<< q.top().f<<" ";
q.pop();
}
}
程序输出:
3.双端队列
双端队列就是一个两端都是结尾的队列。队列的每一端都可以插入数据项和移除数据项。deque是STL中双端队列模版。
3.1主要对方法有:
(1)void pop_front():从队列头部删除元素
(2)void pop_back():从队列删除元素
(3)void push_front(T):从队列头部插入元素
(4)void push_back(T):从队列尾部插入元素
(5)T front():读取队列头部元素
(6)T back(T):读取队列尾部元素
3.2代码实例
#include <iostream>
#include <deque> int main ()
{
std::deque<int> mydeque;
mydeque.push_back (); //队列尾部插入
mydeque.push_back ();
mydeque.push_back ();
mydeque.push_front(); //队列头部插入 std::cout << "Popping out the elements in mydeque:";
while (!mydeque.empty())
{
std::cout << ' ' << mydeque.front();
mydeque.pop_front(); //删除队列头部
}
std::cout << "\nThe final size of mydeque is " << int(mydeque.size()) << '\n';
return ;
}
程序输出:
STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)的更多相关文章
- 06.队列、python标准库中的双端队列、迷宫问题
class QueueUnderflow(ValueError): """队列为空""" pass class SQueue: def __ ...
- python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表
目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...
- HDU 4286 Data Handler --双端队列
题意:有一串数字,两个指针,然后一些添加,删除,反转,以及移动操作,最后输出序列. 解法:可以splay做,但是其实双端队列更简便. 维护三个双端队列LE,MI,RI分别表示[L,R]序列左边,[L, ...
- python中使用双端队列解决回文问题
双端队列:英文名字:deque (全名double-ended queue)是一种具有队列和栈性质的抽象数据类型. 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行. 双端队列可以在 ...
- PHP双向队列,双端队列代码
<?php /** * User: jifei * Date: 2013-07-30 * Time: 23:12 */ /** * PHP实现双向队列,双端队列 * 双端队列(dequ ...
- ArrayDeque(JDK双端队列)源码深度剖析
ArrayDeque(JDK双端队列)源码深度剖析 前言 在本篇文章当中主要跟大家介绍JDK给我们提供的一种用数组实现的双端队列,在之前的文章LinkedList源码剖析当中我们已经介绍了一种双端队列 ...
- 2601 电路维修 (双端队列bfs\优先队列bfs(最短路))
描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板 ...
- 【C++】STL常用容器总结之五:双端队列deque
6.双端队列deque 所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中间其他的元素.双端队 ...
- 队列(Queue)\双端队列(Deque)
队列(Queue)\双端队列(Deque) 队列(Queue) 双端队列(Deque) 算法应用 队列(Queue) 特点: 和栈不同,队列的最大特点是先进先出(FIFO),就好像按顺序排队一样.对于 ...
随机推荐
- django.db.utils.OperationalError: 1045错误
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using pass ...
- Spring boot整合shiro权限管理
Apache Shiro功能框架: Shiro聚焦与应用程序安全领域的四大基石:认证.授权.会话管理和保密. #,认证,也叫作登录,用于验证用户是不是他自己所说的那个人: #,授权,也就是访问控制,比 ...
- [leetcode sort]148. Sort List
Sort a linked list in O(n log n) time using constant space complexity. 以时间复杂度O(n log n)排序一个链表. 归并排序, ...
- LCD
<LCD硬件体系结构> LCD控制器:位于ARM核内部,为LCD提供需要显示的数据,控制信息,控制时序 <LCD控制器结构> REGBANKK : 寄存器组,总共有17个寄存器 ...
- [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
显然有决策单调性,但由于逆序对不容易计算,考虑分治DP. solve(k,x,y,l,r)表示当前需要选k段,待更新的位置为[l,r],这些位置的可能决策点区间为[x,y].暴力计算出(l+r)/2的 ...
- [BZOJ 4870] 组合数问题
Link: 传送门 Solution: 组合数的式子都可以先想想能不能递推,写出来就是: $\sum C_{n*k}^{i*k+r}=\sum C_{n*k-1}^{i*k+r}+\sum C_{n* ...
- 第一章--Go与web应用
Go语言构建web应用的特性 可扩展 可维护 模块化 高性能 HTTP简介 HTTP是一种无状态.由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(cli ...
- hdu 4545 贪心 *
题意:小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转 换使小明的串和小西的变成同一个,那么他们两个人都 ...
- Spotlight on linux 监控 linux服务器资源
步骤一:在window主机上安装spotlight 下载地址:http://worlddownloads.quest.com.edgesuite.net/Repository/www.quest.co ...
- .net orm类库 kiss.data 简单文档记录
kiss.data的简单记录 == [github地址](https://github.com/sdming/Kiss.Data) kiss.data是golang的数据库访问类库[kdb](http ...