c++用vector实现定长队列
创始人
2025-06-01 20:08:39
0

目录

    • queue实现
    • vector实现

我们可以用queue或vector实现定长队列,但是如果我们有遍历定长队列的需求的话,使用queue不是一个好的选择,因为queue本身不支持。

queue实现

C++中的queue标准库提供了一个简单易用的队列容器,可以用来实现定长队列。下面是一段示例代码:

#include 
#include using namespace std;int main()
{queue q;int maxlen = 5; // 队列最大长度for(int i = 1; i <= 10; i++){if(q.size() == maxlen){q.pop();}q.push(i);cout << "队列元素:";while(!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;}return 0;
}

上述代码中,我们定义了一个queue容器,然后通过循环向队列中添加元素。当队列长度达到最大长度时,就要删除队首元素以保持队列长度不变。最后,我们遍历队列输出所有元素。

vector实现

这里也是用模板泛化一下

#include 
#include using namespace std;template
class FixedQueue {
private:vector q;size_t size;
public:FixedQueue(size_t s) : size(s) {q.reserve(size);}void push(const T& t) {if (q.size() >= size) {q.erase(q.begin());}q.push_back(t);}T pop() {T t = q.front();q.erase(q.begin());return t;}T& front() {return q.front();}T& back() {return q.back();}bool empty() const {return q.empty();}size_t getSize() const {return q.size();}void clear() {q.clear();}
};int main() {FixedQueue fq(5);fq.push(1);fq.push(2);fq.push(3);fq.push(4);fq.push(5);fq.push(6);fq.push(7);cout << fq.front() << endl;cout << fq.back() << endl;fq.pop();cout << fq.front() << endl;cout << fq.back() << endl;cout << fq.empty() << endl;cout << fq.getSize() << endl;fq.clear();cout << fq.empty() << endl;cout << fq.getSize() << endl;return 0;
}

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
牛客计算器的改良(Python... 文章目录1.题目描述2.输入描述:3.输出描述:4.示例15.分析6.代码7.结语 链接࿱...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
正大杯|市调大赛|2023备赛... 关键信息 同时随着精细化养宠趋势的深入,宠物消费类目日渐丰富。 本报告通过 Niuco...
文本生成视频Make-A-Vi... Meta公司(原Facebook)在今年9月29日首次推出一款人工智能系...