c++11 标准模板(STL)(std::queue)(三)

news2025/3/12 13:24:45
定义于头文件 <queue>
template<

    class T,
    class Container = std::deque<T>

> class queue;

 std::queue 类是容器适配器,它给予程序员队列的功能——尤其是 FIFO (先进先出)数据结构。

类模板表现为底层容器的包装器——只提供特定的函数集合。 queue 在底层容器尾端推入元素,从首端弹出元素。

成员函数

赋值给容器适配器

std::queue<T,Container>::operator=

queue& operator=( const queue& other );

(1)

queue& operator=( queue&& other );

(2)(C++11 起)

 以 other 的内容替换容器适配器的内容。

1) 复制赋值运算符。以 other 的内容副本替换内容。等效地调用 c = other.c; 。(隐式声明)

2) 移动赋值运算符。用移动语义以 other 的内容替换内容。等效地调用 c = std::move(other.c); 。(隐式声明)

参数

other-用作源的另一容器适配器

返回值

*this

复杂度

等价于底层容器 operator= 的复杂度。

容量

检查底层的容器是否为空

std::queue<T,Container>::empty

bool empty() const;

(C++20 前)

[[nodiscard]] bool empty() const;

(C++20 起)

检查底层容器是否为空,即是否 c.empty() 。

参数

(无)

返回值

若底层容器为空则为 true ,否则为 false 。

复杂度

常数

返回容纳的元素数

std::queue<T,Container>::size

size_type size() const;

返回底层容器中的元素数,即 c.size() 。

参数

(无)

返回值

容器中的元素数。

复杂度

常数。

调用示例

#include <iostream>
#include <forward_list>
#include <string>
#include <iterator>
#include <algorithm>
#include <functional>
#include <queue>
#include <deque>
#include <time.h>

using namespace std;

struct Cell
{
    int x;
    int y;

    Cell() = default;
    Cell(int a, int b): x(a), y(b) {}

    Cell &operator +=(const Cell &cell)
    {
        x += cell.x;
        y += cell.y;
        return *this;
    }

    Cell &operator +(const Cell &cell)
    {
        x += cell.x;
        y += cell.y;
        return *this;
    }

    Cell &operator *(const Cell &cell)
    {
        x *= cell.x;
        y *= cell.y;
        return *this;
    }

    Cell &operator ++()
    {
        x += 1;
        y += 1;
        return *this;
    }


    bool operator <(const Cell &cell) const
    {
        if (x == cell.x)
        {
            return y < cell.y;
        }
        else
        {
            return x < cell.x;
        }
    }

    bool operator >(const Cell &cell) const
    {
        if (x == cell.x)
        {
            return y > cell.y;
        }
        else
        {
            return x > cell.x;
        }
    }

    bool operator ==(const Cell &cell) const
    {
        return x == cell.x && y == cell.y;
    }
};

std::ostream &operator<<(std::ostream &os, const Cell &cell)
{
    os << "{" << cell.x << "," << cell.y << "}";
    return os;
}

void queuePrint(const std::string &name, const std::queue<Cell> &queue)
{
    std::cout << name ;
    std::queue<Cell> queuep = queue;
    while (queuep.size() > 0)
    {
        std::cout << queuep.front() << " ";
        queuep.pop();
    }
    std::cout << std::endl;
}

int main()
{
    std::cout << std::boolalpha;

    std::mt19937 g{std::random_device{}()};
    srand((unsigned)time(NULL));

    auto generate = []()
    {
        int n = std::rand() % 10 + 110;
        Cell cell{n, n};
        return cell;
    };

    std::deque<Cell> deque1(6);
    std::generate(deque1.begin(), deque1.end(), generate);
    std::cout << "deque1:   ";
    std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<Cell>(std::cout, " "));
    std::cout << std::endl;
    //2) 以 cont 的内容复制构造底层容器 c 。
    std::queue<Cell> queue1(deque1);

    //1) 复制赋值运算符。以 other 的内容副本替换内容。
    std::queue<Cell> queue2 = queue1;
    queuePrint("queue2:   ", queue2);
    //检查底层容器是否为空,即是否 c.empty() 。
    std::cout << "queue1 empty: " << queue1.empty() << std::endl;
    std::cout << std::endl;

    //2) 以 cont 的内容复制构造底层容器 c 。
    std::queue<Cell> queue3(deque1);
    std::queue<Cell> queue4 = std::move(queue3);
    queuePrint("queue4:   ", queue4);
    //检查底层容器是否为空,即是否 c.empty() 。
    std::cout << "queue3 empty: " << queue3.empty() << std::endl;
    std::cout << std::endl;

    std::queue<Cell> queue5;
    size_t index = 0;
    while (index < 5)
    {
        Cell cell = generate();
        queue5.push(cell);
        //返回底层容器中的元素数,即 c.size() 。
        std::cout << "queue5.push(" << cell << ")---size: " << queue5.size() << std::endl;
        index++;
    }
    std::cout << std::endl;

    while (index != 0)
    {
        Cell cell = queue5.front();
        queue5.pop();
        //返回底层容器中的元素数,即 c.size() 。
        std::cout << "queue5.pop()---" << cell << "size: " << queue5.size() << std::endl;
        index--;
    }
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

asp.net+sqlserver企业人力资源信息网站系统

下面分别论述本系统的各个功能模块的作用&#xff1a; &#xff08;1&#xff09;员工管理模块&#xff1a;该模块主要是查看自己/同事的资料&#xff0c;以更好促进公司员工之间的相互了解。同时也可以修改自己的部分信息&#xff0c;管理员可以实现对员工信息的添加&#xff…

Wi-Fi 6(802.11ax)解析14:非主动形式的BSR(Buffer Status)反馈

序言 该机制的基本思想就是通过AP竞争&#xff0c;获得TXOP传输时间后&#xff0c;根据各个终端的缓存情况&#xff0c;进行RU资源的分配&#xff0c;当分配完成后&#xff0c;进行上行OFDMA的传输。在这个过程中&#xff0c;缓存情况的反馈可以通过AP询问的方式主动完成&…

Visual Studio Code.app/vscode学习

vscode快速上手使用。 目录&#xff1a; 前言快捷键篇布局篇插件篇vscode问题&#xff08;调试step into无法跳入&#xff09; 建议阅读时间&#xff1a;7min x.1 前言 vscode是一款免费的轻量级编辑器&#xff0c;搭配vim可以实现带debug能力的vim自由。 vim自由&#xf…

OpenAI-ChatGPT最新官方接口《错误代码大全》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(九)(附源码)

Error codes 错误码 前言Introduction 导言API errors API 错误401 - Invalid Authentication 401 -验证无效401 - Incorrect API key provided 401 -提供的API密钥不正确401 - You must be a member of an organization to use the API 401 -您必须是组织的成员才能使用API429…

Apollo配置中心2.0版本详解

目的 部署一个单节点的Apollo配置中心,且包含dev和pro环境的配置。 需要部署的服务 Portal Service, Admin Service, Config Service(包含Meta service 和 Eureka) 架构图 部署图 部署过程: 数据库脚本: portaldb: https://github.com/apolloconfig/apollo/blob/mast…

HTML+CSS+JS 学习笔记(三)———Javascript(上)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(上) HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(中) HTMLCSSJS 学习笔记&#…

2023年14届蓝桥杯省赛“日期统计”题解

问题描述 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 …

cubase elements12中文免费版 详细安装流程

cubase9免费版下载是由Steinberg公司开发的一款音乐制作软件&#xff0c;具有音频编辑处理、多轨录音缩混、视频配乐及环绕声处理等功能&#xff0c;对作曲家和混合工程师来说十分好用&#xff0c;可以大大提高编辑效率&#xff0c;需要的朋友赶快下载吧&#xff01; 软件地址&…

【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在

【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在 1&#xff09;文档编写目的2&#xff09;测试原理3&#xff09;Shell脚本测试3.1.测试路径是否存在3.2.测试目录是否存在3.3.测试文件是否存在3.4.测试路径大小是否大于03.5.测试路径大小是否等于0 4&#xff09;总结 1…

调节磁盘和CPU的矛盾-InnoDB的Buffer

一、缓存的重要性 所以 InnoDB 存储引擎在处理客户端的请求时&#xff0c;当需要访问某个页的数据时&#xff0c;就会把完整的页的数据全部加载到内存中&#xff0c;也就是说即使我们只需要访问一个页的一条记录&#xff0c;那也需要先把整个页的数据加载到内存中。将整个页加…

十大排序总结

十大排序 稳定性 有一个数组,3,2,3,4,1 我们把第一个3标记为黑色 第二个3标记为红色 如果排序之后,黑色的3仍在红色3前边,我们就认为这个排序是稳定的 如果红色3在黑色3前面,我们就认为这个排序是不稳定的 插入排序 直接插入排序 想象斗地主时咋摸牌的,保证有序 import…

【Linux系统】Linux文件系统与日志分析

文件系统与日志分析 一、inode与block1.1inode和block概述1.2inode包含文件的元信息1.3Linux系统文件的三个主要时间属性1.4用户通过文件名打开文件的过程1.5inode的大小1.6模拟磁盘ionde用完 二、日志文件2.1日志的功能2.2日志文件的分类2.2.1内核及系统日志2.2.2用户日志2.2.…

深入理解Linux文件系统和日志分析

目录 一、inode于block 1&#xff09;inode于block概述 2&#xff09;inode的内容 inode包含文件的元信息 用stat命令可以查看某个文件的inode信息 Linux系统文件三个主要的时间属性 目录文件的结构 用户通过文件名打开文件时&#xff0c;系统内部的过程 查看inode号码…

5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)

综合案例2.0 - 蓝牙遥控小车4- 体感控制成品展示案例说明器件说明小车连线小车源码遥控手柄遥控器连线遥控器代码1.摇杆PS2模块说明2.六轴MPU-6050说明成品展示 案例说明 用STM32单片机做了一辆蓝牙控制的麦轮小车&#xff0c;分享一下小车的原理和制作过程。 控制部分分为手机…

POSTGRESQL LINUX 与 PG有关的内存参释义

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

阿里阿里,搞不定政企

如果我们问一位关注科技产业&#xff0c;或者关注云计算、AI技术的朋友&#xff0c;4月11日的阿里云北京峰会上讲了什么。他应该马上会说&#xff0c;发布了通义千问啊。 这话确实没错。但仔细观察这场会&#xff0c;却会发现一个问题&#xff1a;嘉宾好像不太对。 AI与大模型活…

代码随想录训练营day48|198、打家劫舍;213、打家劫舍II;337、打家劫舍III

198、打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

HelloWorld案例详解

HelloWorld案例的编写和执行 Java程序开发运行流程 开发Java程序&#xff0c;需要三个步骤&#xff1a; ●编写代码 ●编译代码 ●运行代码 HelloWorld案例的编写 新建文本文档文件&#xff0c;修改名称为HelloWorld.java用记事本打开HelloWorld.java文件&#xff0c;输写…

如何理解样本统计量?

本期介绍样本统计量是怎么算的&#xff0c;并用Python来模拟随机抽样。用一个在鱼塘捞鱼的简单例子来理解样本均值的概念。 如何理解重复试验&#xff1f; 指能够在完全相同条件下进行多次的试验&#xff1b; 比如我们抛10枚硬币&#xff0c;用来计算正面出现的概率&#xff…

(6) 聚类算法KMeans(案例:矢量量化的降维)

文章目录 理论知识1 sklearn.cluster.KMeans1.1 参数n_clusters1.1.1 小试牛刀1.1.2 模型评估指标轮廓系数Calinski-Harabaz Index 1.1.3 案例&#xff1a;基于轮廓系数来选择n_clusters 1.2 参数init & random_state & n_init&#xff1a;初始质心怎么放好?1.3 重要参…