C++ 栈 stack

栈简介

栈是一种数据结构。它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作。在计算机领域里,栈是数据暂时存储的地方,按照后进先出(下文使用“LIFO”指代)的原则存储数据。

C++ stack 简介

std::stack 类是一种容器适配器,它是一种 LIFO 数据结构。通过它,程序员可以使用栈的功能。同时,std::stack 作为模板类,对存储的元素类型有着极高的灵活性。stack 使用的默认容器是 std::deque,但可以人为更换为其他 C++ 容器。

使用 stack

导入 stack 库

stack 在 < stack > 中定义为:

template<
	class T,
	class Container = std::deque<T>
> class stack;

使用时要加入头文件 < stack >,同时,作为标准库,使用时还要使用名称空间 std。

// 头文件
#include <stack>
// 使用名称空间 std
using namespace std;
// 或者
using std::stack;

创建 stack 容器

stack 容器的创建依赖其的构造函数,下面用 int 类型举例,介绍几个常用的构造函数:

  1. 默认构造函数。容器初始化。
// 函数声明原型为:stack();
stack<int> sta;
  1. 复制构造函数。以 other 的内容复制构造适配器。
// 函数声明原型为:stack( const stack& other );
stack<int> sta_1;
stack<int> sta_2(sta_1);
  1. 以 cont 的内容复制构造底层容器。
// 函数声明原型为:stack( const Container& cont = Container() );
// 若不填写参数,其表现为默认构造函数,内部实现为 std::deque
stack<int> sta;

// 若类模板处不填写所使用的底层容器,则函数参数处只能使用 std::deque 类
deque<int> deq;
stack<int> sta(deq);
// 等价于
stack<int, deque<int>> sta(deq);

// 若在类模板处指定所使用的底层容器,则函数参数处只能使用你所指定的容器
vector<int> arr = { 1, 2, 3, 4 };
stack<int, vector<int>> sta(arr);	// 构造后栈顶的值是 4

元素访问

栈只有一种访问操作:访问栈顶元素

stack<int> sta;
// 函数声明原型为:const_reference top() const;
// 返回 stack 中顶元素的引用。它是最近推入的元素。
sta.top();

容器容量相关

  1. 检查容器适配器是否为空
stack<int> sta;
// 函数声明原型为:bool empty() const;
// 检查底层容器是否为空
sta.empty();
  1. 返回元素数量
stack<int> sta;
// 函数声明原型为:size_type size() const;
// 返回容器适配器中的元素数
sta.size();

容器内容修改相关

入栈

  1. 向栈顶插入元素
stack<int> sta;
// 函数声明原型为:void push( value_type&& value );
// 将给定的元素 value 推到 stack 顶。
sta.push(100);
  1. 在顶部原位构造元素
stack<int> sta;
// 使用方法大致与 push 相同,函数原型略
// 推入新元素到栈顶。原位构造元素,不进行移动或复制操作。
// 效率一般优于 push
sta.emplace(100);

出栈

出栈,即 移除栈顶元素

stack<int> sta;
// 函数声明原型为:void pop();
// 从 stack 移除顶元素。
sta.pop();

参考资料

https://zh.cppreference.com/w/cpp/container/stack

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值