C++ STL--stack

stack准确的说并不是STL framework所提供的容器,而是一个为了满足特殊需求而设计的容器。属于容器适配器(container adapter),它提供了简单而清晰的接口满足我们对数据结构堆栈的需求。

对于stack(也称LIFO,后进先出),我们可以使用 push()将任意数量的元素放入stack内,也可以使用 pop()将元素以其插入的反序从容器中移除。

技术分享图片

上图可以很形象的看出,我们的压入顺序是A->B,待到我们弹出时的顺序就变成了B->A。

1.包含头文件  #include<stack>

2.在头文件<stack>中,class stack 定义如下

1 namespace std
2 {
3 template <typename T,
4           typename Container = deque<T>>
5         class stack;
6 }

第一个template参数代表元素类型,带有默认值的第二个template参数用来定义stack内部存放元素的实际容器,默认为deque

很多人问为什么不用vector,具体原因可能是dequ有移除元素时会自动释放内存,并且不必在重新分配reallocation时复制全部元素的优点。

3.我们可以自定义stack的内部容器

stack的实现只是很单纯的把各项操作转化为内部容器的对应调用,事实上,你可以使用任何sequence容器支持stack,只要它们提供函数:back()、push_back()、pop_back。

举个栗子

1 stack<int> st;             //定义一个int类型内部为deque的stack
2 stack<int,vector<int>> st; //定义一个int类型内部为vector的stack1.核心接口成员函数1 st.push();//将一个元素放入stack内
2 st.top();//返回stack内的“下一个”元素
3 st.pop();//从stack中移除元素

注意,pop弹出栈顶元素但不返回它,top返回栈顶元素但不移除它。两者在stack为空时使用会造成不明确的行为,所以在使用前可以采用 empty() 来检验stack是否为空

2.常用函数

1 st.size();  //返回stack内元素数量
2 st.empty(); //返回容器是否为空

3.comparison的重载

stack支持两个相同类型间的比较(比较原则是字典序),从栈底元素开始比较

comparison可以是下列任何运算:==、 !=、 >=、 <=、 >、 <。

(1).构造函数

stack(class T, class Container = deque<T>)  :创建一个元素类型为T的空栈,容器是deque

(2) 增加函数

  • 把元素x压入栈顶:st.push(const T& x);

(3) 删除函数

  • 当栈非空的情况下,删除栈顶元素:st.pop();

(4) 判断函数

bool empty() :判断栈是否为空,若为空,则返回true,否则返回false

(5) 大小函数

  • int size() :返回栈中元素的数量

(6) 其他函数

  • T&  top() :当栈非空的情况下返回栈顶元素

代码

#include <iostream>
#include <stack>
using namespace std;
int main()
{
    stack<int> st;
    for (int i = 0; i < 5; ++i)
        st.push(i);
    cout<<"st为空 "<<st.empty()<<endl;
    cout << "st元素个数 " << st.size() << endl;
    cout << "st栈顶元素 " << st.top() << endl;
    cout << "依次弹出栈内元素 ";
    while (!st.empty())
    {
        cout << st.top() << "\t";
        st.pop();
    }
}

运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值