除了标准的顺序容器外,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. [LeetCode]Remove Duplicates from Sorted Array题解

    Remove Duplicates from Sorted Array: Given a sorted array, remove the duplicates in place such that ...

  2. PHP 获取当前类名、方法名、URL地址

      1.PHP获取当前类名.方法名  __CLASS__ 获取当前类名  __FUNCTION__ 当前函数名(confirm)  __METHOD__ 当前方法名 (bankcard::confir ...

  3. 武汉邀请赛 Key Logger 双向链表

    Key Logger Time Limit: 3000ms Case Time Limit: 3000ms Memory Limit: 65536KB   64-bit integer IO form ...

  4. 阿里云CentOS7.3配置Java Web应用和Tomcat步骤

    阿里云的Linux系统包括CentOS7.3配置了密钥对 怎样将自己ECS实例绑定密钥对,并启用秘钥: https://help.aliyun.com/document_detail/51798.ht ...

  5. CakePHP调用model类和foreach循环

    1. 引入Model类 2.调用model类(Guarantee)下的getCity()方法 3.写sql语句 并返回获得值 4.foreach循环取得的城市

  6. 标签设置为inline-block后,如何消除标签之间的间隔。

    标签设置为inline-block后,如何消除标签之间的间隔. 例如: <div> <ul> <li><a href="#">学习& ...

  7. Linux VPS主机利用Crontab实现定时重启任务

    第一.安装Crontab可执行环境 一般的VPS/服务器是支持的,但是有些可能没有支持就需要我们来给予安装. A - centos系统 #安装Crontab yum install vixie-cro ...

  8. HTML 5 教程

    HTML5 是下一代的 HTML.有必要再过一遍.看下要点. 具体看  http://www.w3school.com.cn/html5/index.asp    教程 和  HTML5 标签参考手册 ...

  9. Apache 2 解析html中的php

    Ubuntu下安装Apache 2无法解析html中的php Ubuntu下安装了Apache 2却无法解析html中的php ,好多说是在httpd.conf文件中修改代码,但是ubuntu中没有这 ...

  10. Flex 加载dwg

    之前写的几种格式不是专门gis格式,这次来说说加载dwg.首先dwg格式不同于dxf格式,虽然autocad都能加载进去,真正用的比较多的是dwg格式,反正测绘,国土规划部门都是,吐槽下,然而auto ...