首页 > 编程语言 >C++之queue容器

C++之queue容器

时间:2024-11-07 18:17:05浏览次数:3  
标签:std 容器 deque 队列 C++ queue push

queue 是 C++ STL (Standard Template Library) 中的一种容器适配器,用于实现先进先出(FIFO, First In First Out)的数据结构。queue 提供了一组基本的操作来管理队列前端和后端的元素。queue 的底层可以基于不同的容器(如 dequelist)实现,默认情况下使用 deque

主要特点

  1. 先进先出:最早插入的元素最先被移除。
  2. 基本操作:提供 pushpopfrontbackempty 和 size 等基本操作。
  3. 容器适配器queue 是一个容器适配器,可以基于不同的底层容器实现。

常用操作

定义和初始化
#include <queue>

std::queue<int> q; // 创建一个空的 queue 容器
std::queue<int, std::deque<int>> q_deque; // 使用 deque 作为底层容器的 queue(默认)
std::queue<int, std::list<int>> q_list; // 使用 list 作为底层容器的 queue
插入元素
q.push(1); // 将 1 插入队列尾部
q.push(2); // 将 2 插入队列尾部
移除元素
q.pop(); // 移除队列头部的元素
访问队列头部和尾部元素
if (!q.empty()) {
    std::cout << "Front element: " << q.front() << std::endl; // 访问队列头部元素
    std::cout << "Back element: " << q.back() << std::endl; // 访问队列尾部元素
} else {
    std::cout << "Queue is empty." << std::endl;
}
检查队列是否为空
if (q.empty()) {
    std::cout << "Queue is empty." << std::endl;
} else {
    std::cout << "Queue is not empty." << std::endl;
}
获取队列的大小
std::cout << "Queue size: " << q.size() << std::endl;
示例代码

以下是一个完整的示例,展示了如何使用 queue

#include <iostream>
#include <queue>

int main() {
    std::queue<int> q;

    // 插入元素
    q.push(1);
    q.push(2);
    q.push(3);

    // 输出队列头部和尾部元素
    std::cout << "Front element: " << q.front() << std::endl;
    std::cout << "Back element: " << q.back() << std::endl;

    // 移除队列头部元素
    q.pop();

    // 再次输出队列头部和尾部元素
    std::cout << "Front element after pop: " << q.front() << std::endl;
    std::cout << "Back element after pop: " << q.back() << std::endl;

    // 检查队列是否为空
    if (q.empty()) {
        std::cout << "Queue is empty." << std::endl;
    } else {
        std::cout << "Queue is not empty." << std::endl;
    }

    // 获取队列的大小
    std::cout << "Queue size: " << q.size() << std::endl;

    return 0;
}

总结

queue 是一个非常有用的数据结构,适用于需要先进先出操作的场景。常见的应用场景包括任务调度、消息队列、缓冲区管理等。由于 queue 是一个容器适配器,你可以选择不同的底层容器来实现它,以适应不同的性能需求。默认情况下,queue 使用 deque 作为底层容器,因为它在大多数情况下提供了良好的性能。

底层容器的选择

  • deque:默认选择,支持高效的前后插入和删除操作。
  • list:支持双向迭代器,适用于需要频繁插入和删除操作的场景。

选择合适的底层容器可以优化 queue 的性能,特别是在处理大量数据时。

标签:std,容器,deque,队列,C++,queue,push
From: https://blog.csdn.net/weixin_42300449/article/details/143604832

相关文章

  • c++11 --- 左值与右值的使用;
    C++98的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,C++11之后我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名(语法层面上)。左值和右值左值是一个表示数据的表达式(如变量名或解引用的指针),一般是有持久状态,存储在内存中,我们......
  • 【C++】封装红黑树实现mymap和myset
     无论你觉得自己多么的了不起,也永远有人比你更强。......
  • C++继承
    文章目录一、继承的概念和定义1、继承的概念2、继承的定义3、继承基类成员访问方式的变化二、基类和派生类之间的转换三、继承中的作用域1、隐藏规则四、派生类的默认成员函数1、常见默认成员函数2、实现一个不能被继承的类五、继承与友元六、继承与静态成员变量七......
  • Java并发编程 --- 并发容器
    ConcurrentHashMap基本介绍在JDK1.8中,它的数据结构:Node数组+链表/红黑树初始化/***Initializestable,usingthesizerecordedinsizeCtl.*/privatefinalNode<K,V>[]initTable(){Node<K,V>[]tab;intsc;while((tab=table)==null||tab.length......
  • C++ 的前世今生:从“小兄弟”到编程大佬
    当你听到C++这个名字,可能会有点好奇:为什么名字里有个“++”?其实,这个“++”是C++编程中的一个符号,意思是“加一”,也可以理解为“进化版”。C++的名字暗示了它比C语言更加强大、功能更多。那么,这个编程语言是怎么来的?又有什么特别之处呢?让我们用大白话来聊聊C++的历......
  • 使用C++和QT开发应用程序入门以及开发实例分享
    目录1、搭建开发环境(VS2010和QT4.8.2)2、创建一个QT窗口3、在QT窗口中添加子窗口4、QT界面布局5、QT信号(SIGNAL)和槽(SLOT)6、最后C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实......
  • C++ 的“百变魔法”:搞懂基本数据类型和变量
    编程世界里,数据就像材料,而基本数据类型就决定了这些材料能做什么。每种数据类型都有它自己的“特长”,我们可以用它们来处理不同的信息。今天,我们就来看看C++里最常见的几种基本数据类型:int,char,float,double,bool,以及如何用变量来存储这些数据。什么是数据类型?简单......
  • CUDA开始的GPU编程 - 第四章:C++封装GPU上的数组
    第四章:C++封装GPU上的数组std::vector的秘密:第二模板参数**你知道吗?**std::vector作为模板类,其实有两个模板参数:std::vector<T,AllocatorT>那为什么我们平时只用了std::vector呢?因为第二个参数默认是std::allocator。也就是std::vector等价于std::vector<T,s......
  • 应届生必看!23 个高质量 C++ 项目推荐,校招简历秒加分
    大家好,我是小康。最近,不少同学私信我,临近毕业忙着找工作,想问有没有推荐的C++项目,既能练手又能让简历更出彩。我也想起自己当年毕业时同样的焦虑,知道作为C++后端开发的求职者,有几个实际且吸引人的项目,能在面试时为自己增添不少分量。今天就结合我的经验,给大家推荐几个项目,都......
  • C++ explicit关键字
    C++explicit关键字explicit关键字是什么explicit是C++中的一个关键字,它用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的。当使用explicit修饰构造函数时,它将禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数。这能这么说,大家不太好理解,既......