C++之容器std::queue类empty、size、front、back、push、emplace、pop、swap应用总结(二百二十四)

2023-09-20 01:50:49

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C++之容器std::queue类empty、size、front、back、push、emplace、pop、swap应用总结。

2.函数功能介绍

std::queue是C++ STL(标准模板库)中提供的容器类,用于实现队列数据结构。下面是对std::queue类中一些常用的成员函数的作用解释,不包含代码示例:

  1. empty(): 返回一个布尔值,表示队列是否为空。如果队列为空,则返回true;否则,返回false。

  2. size(): 返回一个整数值,表示队列中元素的个数。

  3. front(): 返回队列头部元素的引用,但不删除该元素。如果队列为空,调用该函数将导致未定义的行为。

  4. back(): 返回队列尾部元素的引用,但不删除该元素。如果队列为空,调用该函数将导致未定义的行为。

  5. push(): 接收一个元素,并将其添加到队列的尾部。新元素被添加后,成为新的尾部元素。

  6. emplace(): 类似于push()函数,但是可以在队列中构造元素,而无需创建临时对象。

  7. pop(): 移除队列头部的元素,但不返回它的值。如果队列为空,调用该函数将导致未定义的行为。

  8. swap(): 将当前的队列与另一个队列进行交换。交换后,两个队列中的元素也会互相交换。

这些成员函数允许您操作队列,从而实现先进先出(FIFO)的数据结构。

3.应用实例

<1>. empty(): 判断队列是否为空,返回一个布尔值。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    if (myQueue.empty()) {
        std::cout << "Queue is empty!" << std::endl;
    } else {
        std::cout << "Queue is not empty." << std::endl;
    }
    
    return 0;
}

注意:判断队列是否为空,返回一个布尔值。

<2>. size(): 返回队列中元素的数量。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    myQueue.push(10);
    myQueue.push(20);
    myQueue.push(30);
    
    std::cout << "Queue size: " << myQueue.size() << std::endl;
    
    return 0;
}

注意:返回队列中元素的数量。

<3>. front(): 返回队列的第一个元素的引用。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    myQueue.push(10);
    myQueue.push(20);
    
    int& firstElement = myQueue.front();
    std::cout << "First element: " << firstElement << std::endl;
    
    return 0;
}

注意:返回队列的第一个元素的引用。

<4>. back(): 返回队列的最后一个元素的引用。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    myQueue.push(10);
    myQueue.push(20);
    
    int& lastElement = myQueue.back();
    std::cout << "Last element: " << lastElement << std::endl;
    
    return 0;
}

注意:返回队列的最后一个元素的引用。

<5>. push(): 将元素添加到队列的末尾。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    myQueue.push(10);
    myQueue.push(20);
    
    std::cout << "Queue size: " << myQueue.size() << std::endl;
    
    return 0;
}

注意:将元素添加到队列的末尾。

<6>. emplace(): 以构造函数的参数直接在队列的末尾生成一个新元素。

#include <iostream>
#include <queue>
#include <tuple>

int main() {
    std::queue<std::tuple<int, double, char>> myQueue;
    
    myQueue.emplace(1, 2.3, 'a');
    
    std::cout << "Queue size: " << myQueue.size() << std::endl;
    
    return 0;
}

注意:构造函数的参数直接在队列的末尾生成一个新元素。

<7>. pop(): 移除队列的第一个元素。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;
    
    myQueue.push(10);
    myQueue.push(20);
    
    myQueue.pop();
    
    std::cout << "New front element: " << myQueue.front() << std::endl;
    
    return 0;
}

注意:移除队列的第一个元素。

<8>. swap(): 交换两个队列的元素。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> firstQueue;
    std::queue<int> secondQueue;
    
    firstQueue.push(10);
    secondQueue.push(20);
    
    std::cout << "First queue front element: " << firstQueue.front() << std::endl;
    std::cout << "Second queue front element: " << secondQueue.front() << std::endl;
    
    firstQueue.swap(secondQueue);
    
    std::cout << "After swapping:" << std::endl;
    std::cout << "First queue front element: " << firstQueue.front() << std::endl;
    std::cout << "Second queue front element: " << secondQueue.front() << std::endl;
    
    return 0;
}

注意:交换两个队列的元素。

更多推荐

9、Spring之推断构造方法源码解析

推断构造方法流程图:Spring推断构造方法底层执行流程|ProcessOn免费在线作图,在线流程图,在线思维导图AutowiredAnnotationBeanPostProcessor中推断构造方法不同情况思维脑图:Spring中的一个bean,需要实例化得到一个对象,而实例化就需要用到构造方法。一般情况下,一个类只

【shell学习】企业运维工作中常用的shell脚本

本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》:python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》暂未更新《docker学习》暂未更新《ceph学习

pytorch学习2

分类问题手写数字数据集其中,每个数字图片大小是28x28,矩阵中每个元素的大小为[0,1]区间的灰度值,将二维矩阵拉平(flat)为一维784,数据量不变,这样能忽略上下位置相关性,甚至左右位置相关性也可忽略,再插入一个维度变为[1,784]线性模型能解决吗一个简单的线性模型为:y=w*x+b但对于手写数字来说,用一个

城中村现代化治理,筑牢基层安全底座

7月21日,李强主持召开常务会议指出,在超大特大城市积极稳步实施城中村改造是改善民生、扩大内需、推动城市高质量发展的一项重要举措。基层(村社)治理是作为社会治理的一个基本单元,是城市治理的一个最后一公里,社会治理的重点在基层,难点也在基层。如何深化数字技术融合创新,推进共建共治共享基层治理全面提速,赋能区域数字经济高质

Linux安装包 | Git使用 | NFC搭建

dpgt使用当谈到基于Debian的操作系统中的软件包管理工具时,dpkg是一个重要的工具。它是Debian系统中用于安装、升级、配置和卸载软件包的命令行工具。以下是对dpkg的详细介绍:软件包管理:dpkg可以管理系统中的软件包。它可以安装单个或多个软件包,并处理软件包之间的依赖关系。通过dpkg-i命令,可以安装软

固定资产管理系统都有哪些功能呢

固定资产管理系统作为企业资产管理的重要工具,具有提高效率、降低成本、保证资产合理使用的多种功能。以下是一些典型的功能:资产登记和信息管理:系统可以自动记录公司的固定信息,包括资产名称、型号、购买日期、原始价值、折旧方法、折旧年限等。同时,系统还支持自动更新和查看资产信息。资产申请和偿还:员工可以通过平台申请或偿还资产,

浅谈KNX总线智能照明控制系统在北京南站房中的应用

安科瑞华楠摘要:本文简要介绍了i-busEIB/KNX智能建筑控制系统的基本原理及在北京南站房中的成功应用。阐述了这一系统强大的系统功能、灵活的控制方式节能效果。关键词:i-bus智能建筑控制;控制系统;节能1、工程概况北京新南站位于南护城河以南,马家堡西路以东,南二环右安门外东庄公园内,距离老南站0.5km。站内总建

[JAVAee]SpringBoot日志文件

日志的作用日志可以帮助我们发现程序的问题并进行定位.日志还可以记录用户的登录信息,分析用户的意图.日志能记录程序执行的时间,记录数据.为日后的程序优化提供数据支持.SpringBoot中的日志在SpringBoot中,内置的日志的框架(SLF4J+logback).框架说明slf4j是日志的门面,而logback是日志

Linux命令历史记录管理:使用history命令提高工作效率

文章目录引言1.1关于history命令1.2history命令的作用和用途基本用法2.1查看历史命令列表2.2执行历史命令2.3使用历史命令编号历史命令记录和保存3.1历史命令的存储位置3.2修改历史命令记录数量3.3清除历史命令记录搜索历史命令4.1使用关键字搜索4.2按日期和时间搜索4.3结合其他命令进行高级搜索

众佰诚:抖音开网店选品要怎么做

在移动互联网时代,抖音已经成为了一个风靡全球的社交媒体平台,吸引了数以亿计的用户。因此,许多人看到了在抖音上开设网店的商机,但要成功经营一家抖音网店,选品是至关重要的一环。下面将介绍一些关于如何在抖音上选择合适的商品的方法。确定目标受众:在开设抖音网店之前,首先要明确自己的目标受众是谁。了解你的受众的年龄、性别、兴趣爱

MLAgents (1) 球移动到指定立方体目标

1、ML-Agents库介绍ML-Agents库,训练用于2D、3D、VR/AR游戏的智能agent,经过训练的agent可用于多种目的,包括:控制NPC行为(采用各种设置,例如多个agent和对抗)、对游戏内部版本进行自动化测试、以及评估不同游戏设计决策的预发布版本2、Unity中创建立方体、球和地面球——玩家移动和

热文推荐