std::queue

std::queue 是 C++ 标准库中的一种容器适配器,用于实现先进先出(FIFO)的队列数据结构。类似于 std::stackstd::queue 也是对其他容器的封装,并提供队列的接口。

1. 底层实现

std::queue 并不是一个独立的数据结构,而是基于其他序列容器来实现的,默认情况下使用 std::deque(双端队列)作为其底层容器。std::deque 提供了在两端插入和删除元素的高效操作,非常适合用于实现队列。

自定义实现
  • 默认容器std::queue 默认使用 std::deque 作为底层容器。
  • 可选容器:你也可以选择使用 std::list 作为底层容器。使用 std::vector 作为底层容器不常见,因为 std::vector 在头部插入元素的效率较低。

你可以在定义 std::queue 时指定使用的底层容器:

std::queue<int, std::list<int>> queueWithList;

2. 常用成员函数

std::queue 提供了基本的队列操作函数,符合 FIFO 原则:

构造函数
  • queue():创建一个空队列。
  • queue(const Container& cont):使用指定的容器 cont 初始化队列。
元素访问
  • front():返回队列中第一个元素的引用,即队列头部的元素。
  • back():返回队列中最后一个元素的引用,即队列尾部的元素。
容量
  • empty():检查队列是否为空。如果队列为空,返回 true;否则返回 false
  • size():返回队列中元素的个数。
修改
  • push(const T& value):将元素 value 插入到队列尾部。
  • pop():移除队列头部的元素,但不会返回该元素。
  • emplace(Args&&... args):在队列尾部直接构造元素。它比 push 更高效,因为可以避免临时对象的创建。

3. 具体操作示例

以下是一个使用 std::queue 的简单示例:

#include <iostream>
#include <queue>

int main() {
    // 使用默认的 deque 作为底层容器
    std::queue<int> queue;

    // 将元素插入队列
    queue.push(10);
    queue.push(20);
    queue.push(30);

    std::cout << "Queue size: " << queue.size() << std::endl;
    std::cout << "Front element: " << queue.front() << std::endl;
    std::cout << "Back element: " << queue.back() << std::endl;

    // 移除队列头部元素
    queue.pop();
    std::cout << "Front element after pop: " << queue.front() << std::endl;

    // 判断队列是否为空
    while (!queue.empty()) {
        std::cout << "Popping element: " << queue.front() << std::endl;
        queue.pop();
    }

    return 0;
}

4. 总结

  • 底层实现std::queue 是一个容器适配器,默认使用 std::deque 作为底层容器。你也可以选择 std::list 作为底层容器。
  • 主要操作std::queue 提供了 pushpopfrontbackemptysize 等操作,用于管理队列中的元素和检查队列的状态。
  • 适用场景std::queue 适用于需要 FIFO 行为的数据结构,如任务调度、广度优先搜索等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值