Queue容器简介

简介: 在C++的标准模板库(STL)中,Queue(队列)是一种常用的容器,它遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被移出队列。

特性:

  • 先进先出(FIFO):Queue容器遵循先进先出的原则,保证了数据按照插入顺序被处理。
  • 简单易用:Queue提供了简单的接口和操作方法,使得使用起来非常便捷。
  • 基于其他容器实现:Queue的底层实现通常基于deque容器,保证了高效的插入和删除操作。

优缺点:

  • 优点:

    • 高效的插入和删除操作:Queue的插入和删除操作都是在队列的两端进行,时间复杂度为常数时间。
    • 线程安全:Queue在多线程环境下使用时,可以通过加锁等机制保证线程安全。
    • 适用于各种先进先出场景:Queue适用于处理各种先进先出的数据流,如任务队列、消息队列等。
  • 缺点:

    • 不支持随机访问:Queue不支持随机访问元素,只能通过头部和尾部进行插入和删除操作。
    • 不支持迭代器:Queue不支持迭代器,无法对队列中的元素进行遍历。

使用方法: 使用Queue容器非常简单,只需要包含头文件<queue>,然后通过创建Queue对象并调用其成员函数来进行操作。以下是一些常见的操作方法:

成员函数:

  • 构造函数:用于创建一个空的队列。
  • push():将元素压入队列。
  • pop():将队首元素出队。
  • front():返回队首元素。
  • back():返回队尾元素。
  • empty():检查队列是否为空。
  • size():返回队列中元素的个数。

适用场景:

  • 任务队列:适用于需要按照先进先出顺序执行任务的场景,如线程池中的任务队列。
  • 消息队列:适用于需要按照消息到达顺序处理消息的场景,如网络通信中的消息队列。
  • 缓存队列:适用于需要按照先进先出顺序管理缓存数据的场景,如页面缓存队列。
#include <iostream>
#include <queue>
#include <algorithm>
#include <numeric>

int main() {
    // 创建一个空队列
    std::queue<int> myQueue;

    // 向队列中添加元素
    myQueue.push(5);
    myQueue.push(10);
    myQueue.push(15);

    // 使用循环遍历队列并打印元素
    std::cout << "Queue elements: ";
    while (!myQueue.empty()) {
        std::cout << myQueue.front() << " ";
        myQueue.pop();
    }
    std::cout << std::endl;

    // 重新填充队列
    myQueue.push(5);
    myQueue.push(10);
    myQueue.push(15);

    // 查找特定元素
    int target = 10;
    bool found = false;
    std::queue<int> tempQueue; // 临时队列用于保存未被查找到的元素
    while (!myQueue.empty()) {
        if (myQueue.front() == target) {
            std::cout << "Element " << target << " found in queue" << std::endl;
            found = true;
        }
        else {
            tempQueue.push(myQueue.front());
        }
        myQueue.pop();
    }
    myQueue = tempQueue; // 将未被查找到的元素重新放入原队列

    if (!found) {
        std::cout << "Element " << target << " not found in queue" << std::endl;
    }

    // 计算元素之和
    int sum = 0;
    tempQueue = myQueue; // 使用临时队列保存原队列中的元素
    while (!tempQueue.empty()) {
        sum += tempQueue.front();
        tempQueue.pop();
    }
    std::cout << "Sum of elements in queue: " << sum << std::endl;

    // 反转元素
    std::queue<int> reversedQueue;
    tempQueue = myQueue; // 使用临时队列保存原队列中的元素
    while (!tempQueue.empty()) {
        reversedQueue.push(tempQueue.front());
        tempQueue.pop();
    }

    // 打印反转后的队列元素
    std::cout << "Reversed queue elements: ";
    while (!reversedQueue.empty()) {
        std::cout << reversedQueue.front() << " ";
        reversedQueue.pop();
    }
    std::cout << std::endl;

    return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值