C++ STL中stack和queue的使用教程

4星 · 超过85%的资源 需积分: 0 17 下载量 32 浏览量 更新于2024-09-19 收藏 99KB PDF 举报
"C++中的STL提供了stack(栈)和queue(队列)两种数据结构,它们是基于其他容器(如deque)的封装,用于方便地实现后进先出(LIFO)和先进先出(FIFO)的操作。同时,还提到了priority_queue(优先队列)这一特殊的数据结构,它按照元素的优先级进行出队操作。" 在C++的STL中,stack和queue是两种非常重要的容器适配器,它们并不直接存储元素,而是基于其他容器(默认为deque)来实现特定的行为。 1. stack(栈) 栈是一种后进先出(LIFO)的数据结构,它的操作类似于一个堆栈,常用的操作有: - 初始化:`stack<int> s1;` 或 `stack<string> s2;` - 入栈:`s.push(x);` 将元素x压入栈顶 - 出栈:`s.pop();` 移除并删除栈顶元素,不返回其值 - 访问栈顶:`s.top();` 查看但不移除栈顶元素 - 判断栈空:`s.empty();` 返回bool值,若栈为空则返回true - 获取元素个数:`s.size();` 返回栈中元素数量 2. queue(队列) 队列是一种先进先出(FIFO)的数据结构,常用于处理有序的输入和输出,主要操作包括: - 初始化:`queue<int> q1;` 或 `queue<double> q2;` - 入队:`q.push(x);` 将x添加到队列末尾 - 出队:`q.pop();` 移除并删除队首元素,不返回其值 - 访问队首:`q.front();` 查看但不移除队首元素 - 访问队尾:`q.back();` 查看但不移除队尾元素 - 判断队列空:`q.empty();` 返回bool值,若队列为空则返回true - 获取元素个数:`q.size();` 返回队列中元素数量 3. priority_queue(优先队列) 优先队列是一种特殊的队列,元素的出队顺序取决于它们的优先级。默认情况下,优先级高的元素(通常是最大的元素)优先出队。可以自定义比较函数来改变这个行为。例如: ```cpp priority_queue<int, vector<int>, greater<int>> pq; // 使用小于号比较,小的元素优先 ``` 常用操作与普通队列类似,但需要注意的是,优先队列的出队操作(`pop()`)总是移除优先级最高的元素。 总结来说,C++ STL中的stack和queue为开发者提供了便捷的方式来实现栈和队列的操作,而priority_queue则提供了处理优先级问题的高效方式。这些数据结构在算法设计、任务调度、事件处理等多个领域都有广泛应用。理解并熟练掌握它们的用法对于C++程序员来说至关重要。