C++ 队列
C++ 队列
队列按照特定的顺序(称为先进先出,FIFO)存储多个元素。
FIFO 是 "First In, First Out"(先进先出)的缩写。为了形象地理解 FIFO,可以将队列想象成超市里排队结账的人们。排在队伍最前面的人也是第一个能够付款并离开超市的人。在计算机科学和编程中,这种元素组织方式被称为 FIFO。
与向量不同,队列中的元素不能通过索引号来访问。由于队列元素是从末尾添加、从前端移除的,因此你只能访问队列的前端或后端元素。
要使用队列,必须包含 <queue>
头文件:
// 包含队列库 #include <queue>
创建队列
要创建队列,可以使用 queue
关键字,并在尖括号 <>
内指定它应存储的值的类型,然后是队列的名称:
queue<type> queueName
实例
// 创建一个名为 cars 的字符串队列 queue<string> cars;
注意:队列的类型(在我们的示例中是 string
)一旦声明后就不能更改。
注意:不能像使用向量那样在声明队列时直接添加元素:
实例
queue<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};
添加元素
要向队列中添加元素,可以使用 .push()
函数。
.push()
函数会在队列的末尾添加一个元素:
实例
// 创建一个字符串队列 queue<string> cars; // 向队列中添加元素 cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla");
此时队列的内容如下:
Volvo(前端(第一个)元素) BMW Ford Tesla(后端(最后一个)元素)
访问队列元素
在队列中,只能使用 .front()
和 .back()
分别访问前端或后端的元素:
实例
// 访问前端元素(第一个且是最早的元素) cout << cars.front(); // 输出 "Volvo" // 访问后端元素(最后一个且是最新的元素) cout << cars.back(); // 输出 "Tesla"
修改前端和后端元素
也可以使用 .front()
和 .back()
来修改前端和后端元素的值:
实例
// 修改前端元素的值 cars.front() = "Audi"; // 修改后端元素的值 cars.back() = "VW"; // 访问前端元素 cout << cars.front(); // 现在输出 "Audi" 而不是 "Volvo" // 访问后端元素 cout << cars.back(); // 现在输出 "VW" 而不是 "Tesla"
移除元素
可以使用 .pop()
函数从队列中移除元素。
这会移除前端元素(即队列中第一个且是最早添加的元素):
实例
// 创建一个字符串队列 queue<string> cars; // 向队列中添加元素 cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla"); // 移除前端元素(Volvo) cars.pop(); // 访问前端元素(现在是 BMW) cout << cars.front();
获取队列的大小
要了解队列中有多少个元素,可以使用 .size()
函数:
实例
cout << cars.size();
检查队列是否为空
可以使用 .empty()
函数来检查队列是否为空。
如果队列为空,.empty()
函数返回 1
(true);否则返回 0
(false):
实例
queue<string> cars; cout << cars.empty(); // 输出 1(队列为空)
实例
queue<string> cars; cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla"); cout << cars.empty(); // 输出 0(队列不为空)
栈与队列
队列经常与栈一起提及,栈是上一页描述的一种类似的数据结构。