C++队列queue的用法

本文详细介绍了C++标准库中队列的数据结构及其常用操作,包括push()、front()、back()、size()、pop()、empty()、swap()以及emplace()。通过实例展示了如何在队列中添加、访问、删除元素,以及队列的大小判断、内容交换和构造对象的直接插入。同时,文章提到了push()与emplace()的区别,后者能直接调用构造函数创建元素。

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


1. 基础

队列遵循先进先出的原则

#include<queue>

队列

2. 申明

#include <iostream>
#include <queue>
using namespace std;

int main(){
	std::queue<int> numbers;
}

3. 添加元素 push()

在队列队尾添加一个元素

numbers.push(1);
numbers.push(2);
numbers.push(3);
numbers.push(4);

4. 获取第一个元素 front()

front():返回 queue 中第一个元素的引用

std::cout <<" queue number: " << numbers.front() << std::endl;

queue number: 1

5. 获取最后一个元素 back()

back():返回 queue 中最后一个元素的引用

std::cout <<" queue number back : " << numbers.back() << std::endl;

queue number back : 4

6. 队列的大小 size()

size():返回 queue 中元素的个数

std::cout << " queue size:  " << numbers.size() << std::endl;

queue number back : 4

7. 删除第一个元素 pop()

pop(): 删除 queue 中的第一个元素

//删除第一个元素
numbers.pop();
std::cout <<" queue size after erase : " << numbers.size() << std::endl;

queue size after erase : 3

8. 返回是否为空 empty()

empty():如果 queue 中没有元素的话,返回 true

//返回队列是否为空
std::cout << " numbers if empty :" << numbers.empty() << std::endl;
std::queue<int> nus;
std::cout << " nus if empty : " << nus.empty() << std::endl;

numbers if empty :0
nus if empty : 1

9. 交换两个队列 swap()

// 交换两个队列
// swap()函数用于交换两个队列的内容,但是队列的类型必须相同,尽管大小可能有所不同
std::cout << " numbers size: " << numbers.size() << " nus size: " << nus.size() << std::endl;
numbers.swap(nus);
std::cout << " after swap --> numbers size: " << numbers.size() << " nus size: " << nus.size() << std::endl;

numbers size: 3 nus size: 0
after swap --> numbers size: 0 nus size: 3

10. 遍历队列

queue 也没有迭代器。访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素。

// 遍历队列
// queue 也没有迭代器。访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素。
while (!nus.empty()){
    std::cout << nus.front() << std::endl;
    nus.pop();
}

2
3
4

11. emplace() 与push()

push() 在队尾添加一个元素

emplace() emplace 可以直接传入构造对象需要的元素, 然后自己调用其构造函数

typedef struct Node{
    int x;
    int y;
    Node(int _x, int _y) : x(_x), y(_y) {}
};

int main(){
		//emplace 可以直接传入构造对象需要的元素, 然后自己调用其构造函数
		std::queue<Node> Nodes;
		Node this_node(1, 1);
		Node this_node2(2, 2);
		Nodes.push(this_node);
		Nodes.push(this_node2);
		Nodes.emplace(3, 3);
		std::cout <<"Nodes size: " << Nodes.size() << std::endl;
}

### C++ 中 `queue` 容器的使用方法 #### 构造函数 可以创建一个空的 `queue` 或者基于已有容器初始化一个新的 `queue` 实例。 ```cpp #include <iostream> #include <queue> using namespace std; void constructQueueExample() { // 创建一个存储整数类型的空队列 queue<int> q; // 基于已有的容器(如deque)来构建队列 deque<int> deq = {1, 2, 3}; queue<int, deque<int>> q_from_deque(deq); } ``` #### 赋值操作 支持通过拷贝的方式给另一个 `queue` 对象赋值,这会复制源 `queue` 的所有元素到目标 `queue` 中[^1]。 ```cpp void assignQueueExample() { queue<int> q; q.push(10); q.push(20); queue<int> q_copy; q_copy = q; // 使用重载的等号操作符进行赋值 } ``` #### 数据存取 提供了基本的操作用于向队尾添加新元素 (`push`) 和移除队首元素 (`pop`)。需要注意的是,直接访问队首(`front`)或队尾(`back`)不会改变队列的内容[^3]。 ```cpp void accessDataExample() { queue<string> q; q.push("hello"); cout << "Front element is: " << q.front() << endl; // 输出队首元素 string frontElement = q.front(); cout << "The first element of the queue is " << frontElement << "." << endl; q.pop(); // 移除队首元素 if (q.empty()) { cout << "Now the queue is empty." << endl; } } ``` #### 大小操作 能够查询当前队列是否为空以及获取其中包含多少个元素。 ```cpp void sizeOperationsExample() { queue<double> q; bool isEmpty = q.empty(); // 判断队列是否为空 unsigned int currentSize = q.size(); // 获取队列中元素的数量 while (!isEmpty && currentSize < 5) { q.push(currentSize * 1.1); // 向队列中加入一些数值 ++currentSize; isEmpty = false; } cout << "Final size after adding elements: " << q.size() << endl; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值