C++ 栈
C++ 栈
栈以特定的顺序存储多个元素,称为 **LIFO**。
**LIFO** 代表 **后进先出**。为了形象地理解 LIFO,可以想象一堆煎饼,煎饼的添加和移除都在顶部进行。因此,移除煎饼时,总是移除最后添加的那个。这种组织元素的方式在计算机科学和编程中被称为 LIFO。
与 向量 不同,栈中的元素不能通过索引号访问。由于元素从顶部添加和移除,因此只能访问栈顶的元素。
要使用栈,必须包含 <stack>
头文件
// 包含栈库
#include <stack>
创建栈
要创建栈,使用 stack
关键字,并在尖括号 <>
中指定它应该存储的值的 **类型**,然后是栈的名称,例如:stack<type> stackName
。
// 创建一个名为 cars 的字符串栈
stack<string> cars;
**注意:** 栈的类型(在本例中为字符串)在声明后不能更改。
**注意:** 不能在声明时向栈添加元素,就像 向量 一样
stack<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
添加元素
要在声明栈后向其添加元素,可以使用 .push()
函数
示例
// 创建一个名为 cars 的字符串栈
stack<string> cars;
// 向栈添加元素
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
栈将如下所示(记住最后添加的元素是栈顶元素)
Mazda(栈顶元素)
Ford
BMW
Volvo
访问栈元素
不能通过引用索引号来访问栈元素,就像使用 数组 和 向量 一样。
在栈中,只能访问栈顶元素,这可以通过使用 .top()
函数来完成
更改栈顶元素
也可以使用 .top
函数更改栈顶元素的值
示例
// 更改栈顶元素的值
cars.top() = "Tesla";
// 访问栈顶元素
cout << cars.top(); // 现在输出 "Tesla" 而不是 "Mazda"
自己试一试 »
移除元素
可以使用 .pop()
函数从栈中移除元素。
这将移除添加到栈中的最后一个元素
示例
// 创建一个名为 cars 的字符串栈
stack<string> cars;
// 向栈添加元素
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
// 移除最后添加的元素 (Mazda)
cars.pop();
// 访问栈顶元素 (现在是 Ford)
cout << cars.top();
自己试一试 »
获取栈的大小
要找出栈中有多少个元素,可以使用 .size()
函数
检查栈是否为空
使用 .empty()
函数来确定栈是否为空。
如果栈为空,.empty()
函数返回 1
(true),否则返回 0
(false)
示例
stack<string> cars;
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
cout << cars.empty(); // 输出 0 (不为空)
自己试一试 »
栈和队列
栈通常与 队列 同时提及,队列是在 下一页 中描述的类似数据结构。