Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ if...Else C++ switch C++ while 循环 C++ for 循环 C++ break/continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归

C++ 类

C++ OOP C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构 & STL C++ 向量 C++ 列表 C++ 栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++ 如何

C++ 加两个数 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 示例

C++ 示例 C++ 现实生活中的例子 C++ 编译器 C++ 练习 C++ 测验 C++ 证书


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() 函数来完成

示例

// 访问栈顶元素
cout << cars.top();  // 输出 "Mazda"
自己试一试 »

更改栈顶元素

也可以使用 .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() 函数

示例

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("Mazda");

cout << cars.empty();  // 输出 0 (不为空)
自己试一试 »

栈和队列

栈通常与 队列 同时提及,队列是在 下一页 中描述的类似数据结构。


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.