stack(栈)——STL

本文详细介绍了C++标准库中的stack容器,包括其构造函数、赋值操作、数据存取以及大小操作。stack作为一种先进后出的数据结构,主要用于临时存储和快速访问数据。通过push、pop和top等方法,可以方便地进行元素的添加、删除和查看。示例代码展示了如何使用stack进行元素的压栈、弹栈和检查堆栈状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stack

stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口
栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

  • 栈中进入数据称为 — 入栈 push
  • 栈中弹出数据称为 — 出栈 pop

构造函数:

  • stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式
  • stack(const stack &stk); //拷贝构造函数

赋值操作:

stack& operator=(const stack &stk); //重载等号操作符

数据存取:

  • push(elem); //向栈顶添加元素
  • pop(); //从栈顶移除第一个元素
  • top(); //返回栈顶元素

大小操作:

  • empty(); //判断堆栈是否为空
  • size(); //返回栈的大小
//栈容器常用接口
void test01()
{
	//创建栈容器 栈容器必须符合先进后出
	stack<int> s;
	//向栈中添加元素,叫做 压栈 入栈
	s.push(10);
	s.push(20);
	s.push(30);
	
	while (!s.empty()) 
	{
		//输出栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		//弹出栈顶元素
		s.pop();
	}
	
	cout << "栈的大小为:" << s.size() << endl;
}
### C++ STL Stack 的基本概念 C++ 中的 `std::stack` 是标准模板库 (STL) 提供的一种容器适配器,它实现了的数据结构特性——先进后出(FILO, First In Last Out)。为了使用该容器,需包含头文件 `<stack>` 并声明命名空间 `std`。 #### 头文件引入与命名空间 要使用 `std::stack`,需要在程序开头加入以下两行代码[^3]: ```cpp #include <stack> using namespace std; ``` --- ### 初始化方式 `std::stack` 可以存储任意类型的对象,其初始化形式如下所示[^4]: ```cpp // 声明一个整型 stack<int> st_int; // 声明一个字符串 stack<string> st_string; // 声明一个自定义类型节点的 struct Node { int data; }; stack<Node> st_node; ``` 上述代码展示了三种不同类型的实例化方法:分别是整型、字符串以及用户自定义结构体类型。 --- ### 接口函数及其功能说明 以下是 `std::stack` 支持的主要操作函数及其实现的功能: 1. **压 (`push`)** 向中添加新元素的操作称为压。此过程的时间复杂度为 O(1)。 ```cpp stack<int> s; s.push(1); s.push(2); ``` 2. **取顶元素 (`top`)** 获取当前顶元素而不将其移除。如果尝试访问空中的顶部元素,则行为未定义。 ```cpp cout << s.top() << endl; // 输出 2 ``` 3. **弹 (`pop`)** 移除顶元素的过程被称为弹。注意,`pop()` 不会返回任何值;若想保存被弹出的元素,应在调用前通过 `top()` 方法读取。 ```cpp s.pop(); cout << s.top() << endl; // 输出 1 ``` 4. **判断是否为空 (`empty`)** 返回布尔值表示的状态。当且仅当没有任何元素时返回 true。 ```cpp if (!s.empty()) { cout << "Stack is not empty." << endl; } ``` 5. **获取大小 (`size`)** 返回内现有元素的数量。时间复杂度同样为常量级 O(1)。 ```cpp cout << s.size() << endl; // 如果此时中有两个元素则输出 2 ``` --- ### 示例代码 以下是一个完整的例子,演示了如何创建并操作一个简单的整数[^2]: ```cpp #include <iostream> #include <stack> using namespace std; int main(){ stack<int> s; // 元素入 s.push(1); s.push(2); s.push(3); // 访问顶元素 cout << s.top() << endl; // 输出 3 // 弹出顶元素 s.pop(); // 再次访问新的顶元素 cout << s.top() << endl; // 输出 2 // 判断是否为空 cout << s.empty() << endl; // 输出 0 表示非空 // 查看内的剩余元素数量 cout << s.size() << endl; // 输出 2 return 0; } /* 运行结果: 3 2 0 2 */ ``` --- ### 性能特点 由于底层实现基于其他顺序容器(如 `deque` 或 `list`),因此对于单个元素的基本操作(如 `push`, `pop`, 和 `top`)都具有恒定时间复杂度 O(1),这使得 `std::stack` 成为高效处理 FILO 数据的理想工具之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值