queue
是 C++ STL (Standard Template Library) 中的一种容器适配器,用于实现先进先出(FIFO, First In First Out)的数据结构。queue
提供了一组基本的操作来管理队列前端和后端的元素。queue
的底层可以基于不同的容器(如 deque
或 list
)实现,默认情况下使用 deque
。
主要特点
- 先进先出:最早插入的元素最先被移除。
- 基本操作:提供
push
、pop
、front
、back
、empty
和size
等基本操作。 - 容器适配器:
queue
是一个容器适配器,可以基于不同的底层容器实现。
常用操作
定义和初始化
#include <queue>std::queue<int> q; // 创建一个空的 queue 容器
std::queue<int, std::deque<int>> q_deque; // 使用 deque 作为底层容器的 queue(默认)
std::queue<int, std::list<int>> q_list; // 使用 list 作为底层容器的 queue
插入元素
q.push(1); // 将 1 插入队列尾部
q.push(2); // 将 2 插入队列尾部
移除元素
q.pop(); // 移除队列头部的元素
访问队列头部和尾部元素
if (!q.empty()) {std::cout << "Front element: " << q.front() << std::endl; // 访问队列头部元素std::cout << "Back element: " << q.back() << std::endl; // 访问队列尾部元素
} else {std::cout << "Queue is empty." << std::endl;
}
检查队列是否为空
if (q.empty()) {std::cout << "Queue is empty." << std::endl;
} else {std::cout << "Queue is not empty." << std::endl;
}
获取队列的大小
std::cout << "Queue size: " << q.size() << std::endl;
示例代码
以下是一个完整的示例,展示了如何使用 queue
:
#include <iostream>
#include <queue>int main() {std::queue<int> q;// 插入元素q.push(1);q.push(2);q.push(3);// 输出队列头部和尾部元素std::cout << "Front element: " << q.front() << std::endl;std::cout << "Back element: " << q.back() << std::endl;// 移除队列头部元素q.pop();// 再次输出队列头部和尾部元素std::cout << "Front element after pop: " << q.front() << std::endl;std::cout << "Back element after pop: " << q.back() << std::endl;// 检查队列是否为空if (q.empty()) {std::cout << "Queue is empty." << std::endl;} else {std::cout << "Queue is not empty." << std::endl;}// 获取队列的大小std::cout << "Queue size: " << q.size() << std::endl;return 0;
}
总结
queue
是一个非常有用的数据结构,适用于需要先进先出操作的场景。常见的应用场景包括任务调度、消息队列、缓冲区管理等。由于 queue
是一个容器适配器,你可以选择不同的底层容器来实现它,以适应不同的性能需求。默认情况下,queue
使用 deque
作为底层容器,因为它在大多数情况下提供了良好的性能。
底层容器的选择
deque
:默认选择,支持高效的前后插入和删除操作。list
:支持双向迭代器,适用于需要频繁插入和删除操作的场景。
选择合适的底层容器可以优化 queue
的性能,特别是在处理大量数据时。