容器适配器(一):queue
除了标准的顺序容器外,STL还提供了3种容器适配器,queue,priority_queue和stack
适配器是对顺序容器的包装,它的作用是简化接口.
queue接口十分的简单,只有8个方法。再加上构造函数和比较运算符,push()和emplace()
在queue末尾添加元素。Pop()从头部移除元素。通过front()和back()可以返回头部和尾部元素的引用;切记:pop()不会返回一个元素的副本,如果需要这个pop()的元素,这在之前调用front()方法;
在PacketBuffer.h文件里:
#ifndef QUEUE_PACKETBUFFER_H
#define QUEUE_PACKETBUFFER_H #include <queue>
template<typename T>
class PacketBuffer
{
public:
PacketBuffer(int maxSize = );
bool packetBuffer(const T& packet);
T getNextPacket(); private:
std::queue<T> mPackets;
int mMaxSize;
}; #endif //QUEUE_PACKETBUFFER_H
在PacketBuffer.cpp文件里:
//
// Created by Administrator on 2019/2/18.
// #include <stdexcept>
#include "PacketBuffer.h" template<typename T>
PacketBuffer<T>::PacketBuffer(int maxSize)
:mMaxSize(maxSize)
{ }
template<typename T>
bool PacketBuffer<T>::packetBuffer(const T& packet)
{
if(mMaxSize > && mPackets.size() == mMaxSize)
{
return false;
}
mPackets.push(packet);
return true;
}
template<typename T>
T PacketBuffer<T>::getNextPacket()
{
if(mPackets.empty())
{
throw std::out_of_range("packet is empty\r\n");
}
T temp = mPackets.front();
mPackets.pop();
return temp;
}
在main里:
#include <iostream>
#include "PacketBuffer.h"
#include "PacketBuffer.cpp"
class IPPacket
{
public:
IPPacket(int id)
:mId(id)
{ }
int getId()
{
return mId;
} private:
int mId;
}; int main()
{
PacketBuffer<IPPacket> packet();
for(int i = ;i <= ;++i)
{
if(!packet.packetBuffer(IPPacket(i)))
{
std::cout << "Packet " << i << " dropped (queue is full)" << std::endl;
} }
while(true)
{ try
{
IPPacket ipage = packet.getNextPacket();
std::cout << "id :" << ipage.getId() << std::endl; }catch (const std::out_of_range&)
{
std::cout << "out of range!" << std::endl;
break;
}
}
return ;
}
结果是:
Packet 4 dropped (queue is full)
id :1
id :2
id :3
out of range!
容器适配器(一):queue的更多相关文章
- STL容器适配器 stack, queue
stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...
- 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...
- STL--容器适配器(queue、priority_queue、stack)
适配器(Adaptor)是提供接口映射的模板类.适配器基于其他类来实现新的功能,成员函数可以被添加.隐藏,也可合并以得到新的功能. STL提供了三个容器适配器:queue.priority_queue ...
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...
- c++ STL容器适配器
一.标准库顺序容器适配器的种类 标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈) 二.什么是容器适配器 &q ...
- STL之容器适配器queue的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...
- 容器适配器————queue
只能访问 queue<T> 容器适配器的第一个和最后一个元素.只能在容器的末尾添加新元素,只能从头部移除元素. 操作 queue<int> q;//创建一个int型的空队列q ...
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
vector变长机制.string的其他构造方法,添加.替换和搜索操作,string比较和数值转换,最后是容器适配器. vector对象是如何增长的 vector和string类型提供了一些成员函数, ...
- 容器适配器之queue
转载http://blog.csdn.net/thefutureisour/article/details/7751846容器适配器容器适配器其实就是一个接口转换装置,使得我们能用特定的方法去操作一些 ...
随机推荐
- 六、yarn运行模式
简介 spark的yarn运行模式根据Driver在集群中的位置分成两种: 1)yarn-client 客户端模式 2)yarn-cluster 集群模式 yarn模式和standalone模式不同, ...
- Java中InputStream 、 InputStreamReader 、 BufferedReader的区别
1.InputStream.OutputStream 处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. OutputS ...
- HDU-2046 骨牌铺方格【递推】
http://acm.hdu.edu.cn/showproblem.php?pid=2046 和前面的一样,a[i] = a[i-1] + a[i-2] #include<iostream> ...
- zoj 1048
这道题提醒了我一个问题,怎么在while(cin>>a[i])下中断 #include<iostream> #include<cmath> #include< ...
- protobuf版本冲突
在编译chromium代码的过程中发现,官方推荐使用的版本是ubuntu16.04,但是这个版本的ubuntu比较老旧,一些库都比较老了,但是google自己用的部分却是挺新的,protobuf就是一 ...
- 【设计模式】observer(观察者)-- 对象行为型模式5.7
1.意图 对象之间一对多的依赖关系,当目标对象发生改变时,所有依赖于它的对象都要得到通知并自动更新 2.别名 依赖,发布-订阅 3.动机 1)需要确保相互协作的对象的一致性(数据要保持一致),但一致性 ...
- background-position为什么会出现负值?
上篇文章讲到了雪碧图,其中小机器人抖腿的动作设置了图片的background-position:-640px 循环到-1200px,那么这个数值是如何得出来的?下面具体分析一下如何计算backgrou ...
- Angular面试题二
十一.ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决? 会提示 Duplicates in a repeater are not allowed. 加 track by ...
- MySQL 备份恢复(导入导出)单个 innodb表
MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...
- spring boot(8)-mybatis三种动态sql
脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...