【C++】---STL容器适配器之queue

ops/2024/10/19 19:44:21/

【C++】---STL容器适配器之queue

  • 一、队列
    • 1、队列的性质
  • 二、队列类
    • 1、队列的构造
    • 2、empty()
    • 3、push()
    • 4、pop()
    • 5、size()
    • 6、front()
    • 7、back()
  • 三、队列的模拟实现
    • 1、头文件(底层:deque)
    • 2、测试文件
    • 3、底层:list

一、队列

1、队列的性质

(1)队列是一种容器适配器,容器适配器说白了,它的底层就是用一个标准的容器来封装实现的。专门用于在FIFO:先进先出,从容器的一端插入,一端删除。
在这里插入图片描述

(2)队列作为容器适配器实现,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

(3)底层容器可以是标准容器类模板之一,如可用vector、list可以作为底层容器类,也可以是其他专门设计的容器类,。该底层容器应至少支持以下操作:

    empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队列尾部入队列pop_front:在队列头部出队列

(4)标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

二、队列类

1、队列的构造

在这里插入图片描述


#include<queue>
int main()
{queue<int> q1;return 0;
}

2、empty()

int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.empty() << endl;return 0;
}

在这里插入图片描述

3、push()

int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.empty() << endl;return 0;
}

4、pop()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;return 0;
}

在这里插入图片描述

5、size()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.size() << endl;return 0;
}

在这里插入图片描述

6、front()


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;return 0;
}

7、back()

返回队列的尾部元素:


int main()
{queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.back() << " ";cout << endl;return 0;
}

在这里插入图片描述

三、队列的模拟实现

1、头文件(底层:deque)

#pragma once#include<iostream>
#include<vector>
#include<list>
#include<deque>using namespace std;namespace yjl
{template<class T ,class Container = deque<T>>class queue{private:Container _con;public:bool empty(){return _con.empty();}void push(const T& val){_con.push_back(val);}void pop(){_con.pop_front();}size_t size(){return _con.size();}T front(){return _con.front();}T back(){return _con.back();}};
}

2、测试文件


#include"queue.h"void test_queue()
{yjl::queue<int> q1;q1.push(1);q1.push(2);q1.push(3);q1.push(4);q1.push(5);cout << q1.size() << endl;cout << q1.front() << endl;cout << q1.back() << endl;while (!q1.empty()){cout << q1.front() << " ";q1.pop();}cout << endl;
}int main()
{test_queue();return 0;
}

在这里插入图片描述
queue的底层最好不要用:vector!
因为vector没有关于头部的插入和删除,这样效率比较低,所以queue的底层最好用deque或者list。

3、底层:list

在这里插入图片描述


好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述


http://www.ppmy.cn/ops/19910.html

相关文章

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客&#xff0c;我们将探索云计算的基础知识&#xff0c;以帮助您深入了解这个迅速发展的领域。在前一篇博客中&#xff0c;我们介绍了云原生的概念和重要性&#xff0c;强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…

《Beginning C++20 From Novice to Professional》第五章 Arrays and Loops

循环和数组确实是联系比较紧密的两个基础语法&#xff0c;数组让我们管理大量同类对象&#xff0c;循环可以简单地遍历一个范围内的元素 本章我们可以学到&#xff1a; Arrays 数组开辟一段连续空间存储同类元素&#xff0c;我们通过【】下标来访问某个元素 如果无符号整型占…

为什么有的晶圆厂叫特色工艺晶圆厂?

知识星球&#xff08;星球名&#xff1a; 芯片制造与封测社区&#xff09;里的学员问&#xff1a; 经常看看到某某晶圆厂是12英寸特色工艺晶圆厂&#xff0c;特色工艺是指什么&#xff1f; 芯片的种类&#xff1f; 芯片分为四大类:mems,IC,光电器件&#xff0c;分立器件。 …

BIO NIO AIO有什么区别?

通俗易懂地解释这些东西是我的风格, BIO就是阻塞io,就是一个程序在发出io请求之后不能干任何别的事,只能等待请求,不断检测io的状态,只有接受到反馈之后才能干别的事 适用场景: 用作请求少而且连接时间短的情况 NIO就是非阻塞,也就是没有阻塞,怎么没有阻塞了?说白了就是发出…

C++笔试强训day9

目录 1.添加逗号 2.跳台阶 3.扑克牌顺子 day9的题目都比较简单&#xff0c;就不赘述了 1.添加逗号 链接 我的思路很清晰也很简单易懂&#xff1a; 把输入数据存入字符串string s&#xff0c;定义一个string ret&#xff0c;然后逆置string s&#xff0c;将s中的数一个一个…

3122.使矩阵满足条件的最少操作次数

周赛第三题,知道要用动态规划,但是不知道怎么回到子问题 显然根据题意我们需要让每一列都相同,但是相邻列不能选择同一种数字,观察到数据nums[i]介于0-9,我们就以此为突破口. 首先我们用count[n][10], count[i][j]记录第i1列值为j的元素个数,转移方程如下: dfs(i,pre) max(dfs…

(5)步态识别论文研读——GaitDAN:基于对抗域适应的跨视角步态识别

GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation | IEEE Journals & Magazine | IEEE Xplore GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation 基于对抗与适应 摘要&#xff1a;视角变化导致步态外观存在显着差异。因…

使用 Python 保留 Excel 表头和第一行数据的两种方法

在处理 Excel 文件时&#xff0c;有时我们需要保留表格的表头和部分数据&#xff0c;而删除其他无用的行。本文将介绍如何使用 Python 中的 openpyxl 库和 pandas 库来实现这一目标。 方法一&#xff1a;使用 openpyxl 库 步骤&#xff1a; 1、导入必要的库&#xff1a;从 op…