队列STL

本文介绍了C++ STL中的队列(queue)和双端队列(deque)。队列是一种先进先出(FIFO)的数据结构,支持在队尾插入元素,队头删除元素。双端队列则允许在两端进行插入和删除操作。文中通过例题,如周末舞会、Blah数集、围圈报数、连通块以及滑动窗口、逛画展等,详细解释了这两种数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.队列(queue)

1.队列的基本概念

队列是只允许在一端插入,在另一端删除的线性表

队列的基本操作与栈基本相同,只是获取队头元素用的是q.front();

2.例题代码参考

例题1周末舞会

#include<bits/stdc++.h>
using namespace std;
queue<int>k;
queue<int>l;
int main(){
	int a,b,c;
	cin>>a>>b;
	for(int i=1;i<=a;i++) k.push(i);
	for(int j=1;j<=b;j++) l.push(j);
	cin>>c;
	for(int t=1;t<=c;t++){
		cout<<k.front()<<" "<<l.front()<<endl;
		k.push(k.front());k.pop();
		l.push(l.front());l.pop();
	}
	return 0;
}

例题2Blah数集

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long x,n;
### C++ STL 队列 (queue) 的基本用法与实现 #### 基本概念 `std::queue` 是 C++ 标准模板库(STL)中的容器适配器之一,用于表示先进先出(FIFO, First In First Out)的数据结构。它基于其他底层容器(默认为 `std::deque`),并提供了特定的操作接口来管理数据。 以下是关于 `std::queue` 的一些核心知识点: #### 创建与初始化 可以通过多种方式创建和初始化队列: ```cpp #include <iostream> #include <queue> int main() { std::queue<int> q; // 默认构造函数 q.push(10); // 插入元素到队尾 q.emplace(20); // 使用 emplace 方法直接在队尾构建对象 while (!q.empty()) { // 当队列不为空时执行循环 std::cout << q.front() << ' '; // 输出队首元素 q.pop(); // 移除队首元素 } } ``` 上述代码展示了如何通过 `push()` 和 `emplace()` 向队列中添加元素[^1]。 #### 主要成员函数 | 函数名 | 功能描述 | |--------|----------| | `empty()` | 判断队列是否为空 | | `size()` | 返回当前队列中元素的数量 | | `front()` | 访问队首元素(不会移除该元素) | | `back()` | 访问队尾元素(不会移除该元素) | | `push(x)` 或 `emplace(args...)` | 将新元素压入队尾 | | `pop()` | 删除队首元素 | 需要注意的是,`front()` 和 `back()` 不会修改队列的内容;而 `pop()` 只删除队首元素而不返回其值。 #### 自定义类型支持 除了内置类型外,还可以存储自定义类型的对象于队列之中。例如给定如下结构体: ```cpp struct Person { uint8_t id; uint8_t age; std::string name; bool operator<(const Person& other) const { return this->id < other.id; } }; // 初始化队列 std::queue<Person> personQueue; personQueue.push(Person{1, 18, "Alice"}); personQueue.push(Person{2, 25, "Bob"}); while (!personQueue.empty()) { auto currentPerson = personQueue.front(); std::cout << "ID: " << static_cast<int>(currentPerson.id) << ", Age: " << static_cast<int>(currentPerson.age) << ", Name: " << currentQueue.name << '\n'; personQueue.pop(); } ``` 此示例说明了如何向队列中插入以及访问复杂数据类型的实例。 #### 底层实现机制 虽然标准并未强制规定其实现细节,但通常情况下,默认使用的底层数组是双端队列 (`std::deque`) 。这意味着可以高效地在一侧增加或减少项目的同时保持另一侧稳定性能表现良好。 如果需要改变基础容器,则可以在声明时指定不同的容器类作为第二个模板参数: ```cpp std::queue<int,std::list<int>> listBasedQueue; ``` 以上就是有关C++ STL 中 queue 组件的基础介绍及其典型应用场景分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值