C++ STL Stack, Queue及Vector详解与操作示例

需积分: 21 1 下载量 2 浏览量 更新于2024-09-09 收藏 47KB DOC 举报
在C++中,标准模板库(Standard Template Library, STL)提供了几种基础的数据结构容器,如栈(Stack)、队列(Queue)和向量(Vector),它们在处理数据时具有不同的特性和用途。本文将详细介绍这些容器的使用方法以及它们在程序中的应用场景。 1. **Stack (栈)**: - `top()`函数用于获取栈顶元素,但不会将其移除。这对于需要查看但不改变栈顶元素的情况非常有用。 - `empty()`函数用来检查栈是否为空,返回布尔值,如果为空则为`true`,反之为`false`。 - `size()`函数返回栈中元素的数量。 - `push()`函数用于在栈顶添加新元素,常用于后进先出(Last In, First Out, LIFO)的数据结构需求。 - `pop()`函数用于移除并返回栈顶元素,实现数据的出栈操作。 以下是一个栈的示例代码: ```cpp #include <iostream> #include <stack> using namespace std; void main() { stack<char> v; for (int i = 0; i < 10; i++) { v.push(i + 97); // 将字符 'a' 到 'j' 入栈 } cout << v.size() << endl; // 输出栈的大小 while (!v.empty()) { // 遍历并打印栈顶元素 cout << v.top() << ""; v.pop(); } } ``` 2. **Queue (队列)**: - `empty()`同样用于判断队列是否为空。 - `front()`函数返回队列的前端元素,即第一个加入的元素。 - `pop()`函数移除并返回队头元素,遵循先进先出(First In, First Out, FIFO)原则。 - `back()`返回队列的后端元素,即最后加入的元素。 - `push()`函数在队尾插入新元素。 一个队列的示例代码如下: ```cpp #include <iostream> #include <queue> using namespace std; int main() { queue<int> q; for (int i = 0; i < 5; i++) { q.push(i); // 将数字0到4依次入队 } while (!q.empty()) { cout << q.front() << endl; // 打印队头元素并出队 q.pop(); } return 0; } ``` 3. **Priority Queue (优先队列)**: - 优先队列是特殊类型的队列,它允许用户根据自定义的优先级对元素进行排序。 - 每次`push()`和`pop()`操作会动态调整队列内部的顺序,以确保符合用户设置的优先级。 - `top()`返回队列头部(即优先级最高的)元素。 - 默认情况下,优先队列使用元素类型的 `<` 操作符来确定优先级。例如,`priority_queue<int>` 中,较大的整数有更高的优先级。 在优先队列的应用示例中,例如使用`<`操作符,将数字5, 3, 2, 4, 6依次`push`到`priority_queue`中,输出结果将是最大的数字6,然后是5,依此类推。 ```cpp priority_queue<int> pq; // 默认按数值大小排序,6最大 pq.push(5); pq.push(3); pq.push(2); pq.push(4); pq.push(6); // 输出:6 5 4 3 2 ``` 另一种情况是,如果希望小数具有更高的优先级,可以使用`greater<int>`作为比较器: ```cpp priority_queue<int, vector<int>, greater<int>> pq; // 小的整数优先 ``` 通过以上介绍,你可以理解C++ STL中的栈、队列和优先队列的基本操作和用法,这些数据结构在算法设计、事件处理和许多其他场景中都发挥着重要作用。