除了标准的顺序容器外,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的更多相关文章

  1. STL容器适配器 stack, queue

    stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...

  2. 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

    一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...

  3. STL--容器适配器(queue、priority_queue、stack)

    适配器(Adaptor)是提供接口映射的模板类.适配器基于其他类来实现新的功能,成员函数可以被添加.隐藏,也可合并以得到新的功能. STL提供了三个容器适配器:queue.priority_queue ...

  4. C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器

    STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...

  5. c++ STL容器适配器

    一.标准库顺序容器适配器的种类     标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈)   二.什么是容器适配器     &q ...

  6. STL之容器适配器queue的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...

  7. 容器适配器————queue

    只能访问 queue<T> 容器适配器的第一个和最后一个元素.只能在容器的末尾添加新元素,只能从头部移除元素. 操作 queue<int> q;//创建一个int型的空队列q ...

  8. C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器

    vector变长机制.string的其他构造方法,添加.替换和搜索操作,string比较和数值转换,最后是容器适配器. vector对象是如何增长的 vector和string类型提供了一些成员函数, ...

  9. 容器适配器之queue

    转载http://blog.csdn.net/thefutureisour/article/details/7751846容器适配器容器适配器其实就是一个接口转换装置,使得我们能用特定的方法去操作一些 ...

随机推荐

  1. 六、yarn运行模式

    简介 spark的yarn运行模式根据Driver在集群中的位置分成两种: 1)yarn-client 客户端模式 2)yarn-cluster 集群模式 yarn模式和standalone模式不同, ...

  2. Java中InputStream 、 InputStreamReader 、 BufferedReader的区别

    1.InputStream.OutputStream 处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. OutputS ...

  3. HDU-2046 骨牌铺方格【递推】

    http://acm.hdu.edu.cn/showproblem.php?pid=2046 和前面的一样,a[i] = a[i-1] + a[i-2] #include<iostream> ...

  4. zoj 1048

    这道题提醒了我一个问题,怎么在while(cin>>a[i])下中断 #include<iostream> #include<cmath> #include< ...

  5. protobuf版本冲突

    在编译chromium代码的过程中发现,官方推荐使用的版本是ubuntu16.04,但是这个版本的ubuntu比较老旧,一些库都比较老了,但是google自己用的部分却是挺新的,protobuf就是一 ...

  6. 【设计模式】observer(观察者)-- 对象行为型模式5.7

    1.意图 对象之间一对多的依赖关系,当目标对象发生改变时,所有依赖于它的对象都要得到通知并自动更新 2.别名 依赖,发布-订阅 3.动机 1)需要确保相互协作的对象的一致性(数据要保持一致),但一致性 ...

  7. background-position为什么会出现负值?

    上篇文章讲到了雪碧图,其中小机器人抖腿的动作设置了图片的background-position:-640px 循环到-1200px,那么这个数值是如何得出来的?下面具体分析一下如何计算backgrou ...

  8. Angular面试题二

    十一.ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决? 会提示 Duplicates in a repeater are not allowed. 加 track by ...

  9. MySQL 备份恢复(导入导出)单个 innodb表

    MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...

  10. spring boot(8)-mybatis三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...