C++中,queue(队列)是一种标准库容器,它遵循先进先出(FIFO)的原则,即最先进入队列的元素将最先被取出。queue是基于模板的数据结构,可以存储任意类型的元素。
deque(双端队列)与queue类似,但它允许在容器的两端进行有效的插入和删除操作。
1 queue
1.1 头文件
在使用queue之前,需要包含<queue>头文件:
#include <queue>
1.2 创建对象
使用std::queue 模板类创建queue对象,指定存储在队列中的元素类型:
std::queue<int> myQueue;
1.3 基本操作
- push() : 将元素添加到队列的末尾。
- pop() : 删除队列头部的元素。
- front() : 访问队列头部的元素。
- back() : 访问队列尾部的元素。
- empty() : 检查队列是否为空。
- size() : 返回队列中元素的数量。
- emplace() : 在当前后元素上方的队列中插入新元素。
需要注意,push和emplace类似,但emplace实质上是传递构造函数的参数,直接在内存上构造对象,省去移动的过程。
1.4 示例用法
std::queue<int> myQueue;
myQueue.push(10);
myQueue.push(20);
myQueue.push(30);
while (!myQueue.empty()) {
std::cout << myQueue.front() << " "; // 输出队列头部元素
myQueue.pop(); // 删除队列头部元素
}
1.5 注意事项
- queue队列不提供迭代器访问元素,只能通过front和back访问队列头尾元素。
- queue队列不支持随机访问,只能在队列头部删除元素,队列尾部添加元素。
2 deque
在C++中,deque(双端队列)是一种标准库容器,它允许在两端进行高效的插入和删除操作。
2.1 头文件
使用deque和queue一样,都需要包含<queue>头文件:
#include <queue>
2.2 创建对象:
使用std::deque模板类创建deque对象,指定存储在双端队列中的元素类型:
std::deque<int> myDeque;
2.3 基本操作
- push_front() : 在双端队列的前端插入元素。
- push_back() : 在双端队列的后端插入元素。
- pop_front() : 删除双端队列的第一个元素。
- pop_back() : 删除双端队列的最后一个元素。
- front() : 访问双端队列的第一个元素。
- back() : 访问双端队列的最后一个元素。
- empty() : 检查双端队列是否为空。
- size() : 返回双端队列中元素的数量。
2.4 示例用法
std::deque<int> myDeque;
myDeque.push_front(10);
myDeque.push_back(20);
while (!myDeque.empty()) {
std::cout << myDeque.front() << " "; // 输出双端队列的第一个元素
myDeque.pop_front(); // 删除双端队列的第一个元素
}
2.5 注意事项
- deque支持高效的在两端进行插入和删除操作,适合需要频繁在两端操作元素的场景。
- 与vector相比,deque在插入和删除操作方面更高效,但在随机访问方面性能略低。