C++ std::queue 容器适配器详解
创作时间:
作者:
@小白创作中心
C++ std::queue 容器适配器详解
引用
CSDN
1.
https://blog.csdn.net/Allen_Spring/article/details/141086755
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
不提供迭代器,因为其主要设计目标是提供一个简单的队列接口,而不是通用的容器接口。
本文原文来自CSDN
热门推荐
《最强大脑》项目难度翻车,庞博说出秒解漏洞,选手开始疯狂试错
SCI二区文章的学术水平与价值
什么是夹胶玻璃?夹胶玻璃的特性、应用及选购要点介绍
小儿咳嗽吃什么好?中医教你辨证施食
房贷压力下的心理挑战:如何应对与缓解?
2025年GDC|AI焕新医疗,谁能领跑“AI+医疗”新赛道?
中国古典园林如何命名?以苏州园林为例,聊园名背后的文化内涵
右冠状动脉起源于左冠窦是怎么回事
突发!四川都江堰发生3.4级地震 地震成因是什么?应该如何预防?
2024中南林业科技大学各专业考研分数线一览表 历年复试线汇总
胰岛素周制剂——糖友治疗新选择
无人机广泛应用搅动中东局势
水洗棉和纯棉有什么区别?
汽车保养可不简单,遇到这些误区连老司机都会忽视了,知道都有哪些吗?
企业微信如何群发消息给客户?
深入解析VaR方法在风险管理中的应用
牛肉面的历史渊源与文化背景探究
太后临朝称制:权力与礼仪的交织
年轻人压力大怎么缓解
《绝区零》开服爆火!米哈游拥抱AI编程,游戏开发进入智能时代?
歼-20超音速巡航能力揭秘:技术原理与实战价值
蓝牙5.4技术:开启无线连接的新纪元
在线占卜:灵棋经的智慧与现代应用
蜘蛛网能黏万物,为啥黏不住蜘蛛?
日本女性正回归职场,但仍面临诸多挑战
显示器色彩调节指南:提升观影与工作体验的实用技巧
为何肩部会“冻结”?医生提醒:做好8个预防,远离肩周炎
波恩大学医院:胳膊上疤痕的类型与治疗方法
疤痕是怎么形成的原因
工程与技术领域的创新、知识产权保护与产业合作的紧密联系