C++,std::queue 详解

在这里插入图片描述


1. 概述

std::queue 是 C++ 标准模板库(STL)中的一个容器适配器,它提供了一种先进先出(FIFO)的数据结构。std::queue 通常被用于存储元素集合,并且只允许在尾部添加新元素(push),在头部移除元素(pop)。这种特性使得 std::queue 成为实现队列行为的理想选择。


2. 包含头文件

要使用 std::queue,首先需要包含对应的头文件:

#include <queue>

3. 基本操作

3.1 构造函数

  • queue(): 默认构造函数,创建一个空的队列。
  • queue(const queue& other): 拷贝构造函数,创建一个与 other 相同的队列。

3.2 赋值操作

  • queue& operator=(const queue& other): 赋值操作符,将 other 的内容赋值给当前队列。

3.3 成员函数

  • bool empty() const: 如果队列为空,则返回 true;否则返回 false。
  • size_type size() const: 返回队列中元素的数量。
  • void push(const value_type& val): 在队列尾部添加一个元素 val。注意,对于 C++11 及更高版本,也支持右值引用版本的 push(void push(value_type&& val)),这可以优化移动语义。
  • void pop(): 移除队列头部的元素。如果队列为空,则行为未定义(通常是崩溃)。
  • value_type& front(): 返回队列头部的元素的引用。如果队列为空,则行为未定义。
  • const value_type& front() const: 返回队列头部的元素的常量引用。如果队列为空,则行为未定义。
  • value_type& back(): 返回队列尾部的元素的引用。如果队列为空,则行为未定义。
  • const value_type& back() const: 返回队列尾部的元素的常量引用。如果队列为空,则行为未定义。

4. 迭代器

std::queue 不提供迭代器支持,因为它被设计为仅通过其接口(如 front(), back(), push(), pop())来访问元素。如果你需要迭代访问元素,可能需要考虑使用 std::deque 或 std::list 作为底层容器(通过模板参数指定给 std::queue),但这将破坏 std::queue 提供的抽象和封装。


5. 示例

#include <iostream>  
#include <queue>  
  
int main() {  
    std::queue<int> myQueue;  
  
    // 向队列中添加元素  
    myQueue.push(10);  
    myQueue.push(20);  
  
    // 访问队列头部的元素  
    std::cout << "Front element is " << myQueue.front() << std::endl;  
  
    // 移除队列头部的元素  
    myQueue.pop();  
  
    // 访问新的队列头部的元素  
    std::cout << "New front element is " << myQueue.front() << std::endl;  
  
    // 检查队列是否为空  
    if (myQueue.empty()) {  
        std::cout << "Queue is empty." << std::endl;  
    } else {  
        std::cout << "Queue is not empty." << std::endl;  
    }  
  
    return 0;  
}

6. 注意事项

  • 使用 std::queue 时,必须确保不会在队列为空时调用 front(), back(), 或 pop(),这会导致未定义行为(通常是程序崩溃)。
  • 虽然 std::queue 通常与 std::deque 一起使用作为底层容器(因为它是默认选择),但你也可以通过模板参数指定其他容器类型,如 std::list。然而,这可能会影响性能。
  • std::queue 不提供迭代器,因为其主要设计目标是提供一个简单的队列接口,而不是通用的容器接口。

参考

【】std::queue
【】C++ 容器类
【】C++ Queue(队列)
【】队列与C++中的std::queue详解(多图超详细)
【】C++ 清空队列(queue)的几种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值