除了标准的顺序容器外,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. java多线程(一)-五种线程创建方式

    简单使用示例 Java 提供了三种创建线程的方法: 通过实现 Runnable 接口: 通过继承 Thread 类本身: 通过 Callable 和 Future 创建线程. 还有 定时器 线程池 下 ...

  2. JDK的安装与卸载

      1.jdk 下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html 2.在 ...

  3. Visual studio 2013打开报异常"Exception has been thrown by the target of an invocation"

    最近遇到一个问题,打开VS2013和SQL Server2014都会出报错,错误信息如下: 以前都是好好的,重启了机子也不行,能打开两个VS,再打开第三个VS还是会报错,百度无果,还是在google上 ...

  4. Github+hexo+next搭建教程

    今天参考的是大神的教程,学了一个新东西,但是可能由于原教程中运用的npm包与我当前使用的npm包版本不同的原因,有出过多处运行错误,但都在此教程中解决了; 总结了下命令: npm install he ...

  5. ruby-程序员最好的朋友

    ruby一门开源的动态编程语言,注重简洁和效率.Ruby 的句法优雅,读起来自然,写起来舒适. 介绍 这是个不会超过20分钟的 Ruby 简介.阅读前请您先将 Ruby 安装好.(如果您还没有安装Ru ...

  6. java 策略模式

    <Head First 设计模式>学习中  设计原则 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 多用组合少用继承   ...

  7. Windows系统环境下安装dlib

    Windows系统环境下安装dlib 因为今天需要在windows环境下做一些图片处理,所以需要在pycharm中配置环境,而其中需要的主要是dlib的安装: 下面说一下关于dlib的配置安装: —- ...

  8. jQuery中index()方法用法实例

    本文实例讲述了jQuery中index()方法用法.分享给大家供大家参考.具体分析如下: 此方法可以搜索匹配元素,并返回元素的索引值.索引值是从0开始的. 语法结构一: 当此方法没有参数的时候,返回值 ...

  9. 【Leetcode】【Hard】Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  10. 【转】深入理解 Session 与 Cookie

    Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...