C++ 栈
C++ 栈
栈(stack)按照特定的顺序(称为后进先出,即 LIFO)存储多个元素。
LIFO 是 "Last In, First Out"(后进先出)的缩写。要理解 LIFO,可以想象一堆煎饼,煎饼是从顶部添加和移除的。因此,当你移除一块煎饼时,它总是你最后添加的那块。在计算机科学和编程中,这种组织元素的方式被称为 LIFO。
与向量不同,栈中的元素不能通过索引号访问。由于元素是从栈顶添加和移除的,因此你只能访问栈顶的元素。
要使用栈,必须包含 <stack>
头文件:
// 包含栈库 #include <stack>
创建栈
要创建一个栈,可以使用 stack
关键字,并在尖括号 <>
内指定要存储的值的类型,然后是栈的名称,格式为:
stack<类型> 栈名
实例
// 创建一个名为 cars 的字符串栈 stack<string> cars;
注意:栈的类型(本例中为 string
)一旦声明后就不能更改。
注意:与向量不同,你不能在声明栈时直接添加元素:
实例
stack<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};
添加元素
要向栈中添加元素,可以使用 .push()
函数:
实例
// 创建一个名为 cars 的字符串栈 stack<string> cars; // 向栈中添加元素 cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla");
此时栈的结构如下(记住,最后添加的元素是栈顶元素):
Tesla (栈顶元素) Ford BMW Volvo
访问栈元素
与数组和向量不同,你不能通过索引号来访问栈元素。
在栈中,你只能访问栈顶元素,这可以通过 .top()
函数实现:
实例
// 访问栈顶元素 cout << cars.top(); // 输出 "Tesla"
修改栈顶元素
你也可以使用 .top()
函数来修改栈顶元素的值:
实例
// 修改栈顶元素的值 cars.top() = "Audi"; // 访问栈顶元素 cout << cars.top(); // 现在输出 "Audi" 而非 "Tesla"
移除元素
你可以使用 .pop()
函数从栈中移除一个元素。
这将移除栈中最后添加的元素:
实例
// 创建一个名为 cars 的字符串栈 stack<string> cars; // 向栈中添加元素 cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla"); // 移除最后添加的元素(Tesla) cars.pop(); // 访问栈顶元素(现在是 Ford) cout << cars.top();
获取栈的大小
要了解栈中有多少个元素,可以使用 .size()
函数:
实例
cout << cars.size();
检查栈是否为空
可以使用 .empty()
函数来判断栈是否为空。
.empty()
函数在栈为空时返回 1
(true),在栈包含元素时返回 0
(false):
实例
stack<string> cars; cout << cars.empty(); // 输出 1(栈为空)
实例
stack<string> cars; cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Tesla"); cout << cars.empty(); // 输出 0(栈不为空)
栈与队列
栈通常与队列一起提及,队列是另一种类似的数据结构,将在下一页进行介绍。