除了标准的顺序容器外,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 = 0); 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 > 0 && 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(3); for(int i = 1;i <= 4;++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 0; }
结果是:
Packet 4 dropped (queue is full)
id :1
id :2
id :3
out of range!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· Dify开发必备:分享8个官方文档不曾解释的关键技巧
· 活动中台系统慢 SQL 治理实践
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发
· BotSharp + MCP 三步实现智能体开发