stack(栈)干货归纳+用法示例

一.stack简介

  • stack即“堆栈”, 是STL模板库中的一种后进先出(FILO)的适配器(容器的封装),头文件:<stack>
  • 堆栈遵循后进先出的原则,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。
  • 栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。
  • stack对象的默认构造形式: stack <T> stkT;

在这里插入图片描述

二.stack成员函数

1.stack::empty():返回栈是否为空,如果为空则返回 true,否则返回 false。

std::stack<int> myStack;
if(myStack.empty()){
    std::cout << "Stack is empty." << std::endl;
}

2.stack::size():返回栈中元素的个数。

std::stack<int> myStack;
std::cout << "Size of stack: " << myStack.size() << std::endl;

3.stack::top():返回栈顶元素的引用,但不删除该元素。如果栈为空,则该操作未定义。

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
std::cout << "Top element: " << myStack.top() << std::endl;

4.stack::push(const T& value):在栈顶插入一个元素。

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);

5.stack::emplace(Args&&… args):在栈顶插入一个元素,通过参数直接构造元素。这个函数比 push() 更高效,因为它在插入元素时可以直接调用构造函数。

std::stack<std::string> myStack;
myStack.emplace("Hello");
myStack.emplace("World");

6.stack::pop():从栈顶删除一个元素,但不返回该元素。如果栈为空,则该操作未定义。

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.pop();

三.stack实例

#include "pch.h"
#include <iostream>
#include <stack>
using namespace std;

//遍历打印栈(注:栈容器没有迭代器)
void print(stack<int>stk) {   
	stack<int> tmp;
	cout << "栈顶至栈底:" << endl ;
	while (!stk.empty()) {   //打印栈顶元素,将其压入临时栈保存后,弹出
		cout << stk.top() << " ";
		tmp.push(stk.top());
		stk.pop();
	}
	while (!tmp.empty()) {   //将临时栈恢复至原栈
		stk.push(tmp.top());
		tmp.pop();
	}
	cout << endl << endl;
}

int main(){
	//构造栈
	stack<int>stk1;     
	for (int i = 0; i < 10; i++)
		stk1.push(i);
	print(stk1);

	//拷贝构造栈
	stack<int>stk2(stk1);  
	print(stk2);

	//赋值栈
	stack<int>stk3;
	stk3 = stk1;
	stk3.pop();
	stk3.push(99);   //弹出栈顶元素
	print(stk3);
	cout << "stk3.size()=" << stk2.size() << endl;
}

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuZuqiang_3027

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值