C++ STL 之stack

本文详细介绍了C++ STL中的stack容器,包括其定义、常用函数如push、pop、top和empty等,以及如何使用stack进行数据操作。stack作为一种先进后出的数据结构,常用于模拟递归和解决特定问题,避免因递归深度过大导致的栈溢出。此外,还特别指出stack不支持迭代器,不能直接初始化,但可以通过其他容器如vector、list或deque进行初始化。
摘要由CSDN通过智能技术生成

目录

1.stack的定义

2.stack的常用函数

 3.stack的常见用途

4.几点说明


1.stack的定义

stack翻译为栈,是STL中实现的一个先进后出,后进先出的容器。它只有一个出口,只能操作最顶端元素。 

1.1头文件

要使用stack,应先添加头文件#include<stack>,并在头文件下面加上“using namespace std;”然后就可以使用了。

#include <stack>

1.2定义形式

stack<typename> name; 
//typename可以是任意基本数据类型或容器

stack<int>s;
stack<string>s;
stack<node>s; //node是结构体类型

2.stack的常用函数

代码含义
push( )

向栈压入一个元素 a(s.push(a); )

pop( )

移除栈顶元素(s.pop(); )

top( )返回栈顶元素值 (s.top() )

empty( )

返回bool型,表示栈内是否为空 (s.empty() )

[true为空,false为非空 ]

size( )

返回栈内元素个数 (s.size() )

示例如下:

#include <iostream>
#include <stack>
using namespace std;
int main()
{  stack<int>s;
   for(int i=1;i<=5;i++)
     {s.push(i);}  //push(i)将i压入栈,故此处以此入栈1 2 3 4 5
   cout<<"Top:"<<s.top()<<endl;
   cout<<"Size:"<<s.size()<<endl;
   s.pop();  //将栈顶元素出栈,即 5 出栈
   cout<<"Top:"<<s.top()<<endl;  //移除栈顶元素后,现在的栈顶元素是 4
   if(s.empty())
    {cout<<"Is empty"<<endl;}
   else{cout<<"Is not empty"<<endl;}
   return 0;
}

输出结果:

 3.stack的常见用途

       stack常用来模拟一些递归,防止程序对栈内存的限制而导致程序出错。一般来说,程序的栈内存空间很小,对有些题目来说,如果用普通的函数来进行递归一旦递归层数过深(不同机器不同,约几千至几万层),则会导致程序运行崩溃如果用栈来模拟递归算法的实现可以避免这一方面的问题(不过这种应用出现较少)。【此处摘抄自《算法笔记》】

4.几点说明

4.1 stack没有迭代器

       stack具有先进后出的特点,只能对栈顶元素进行操作。所以stack不提供遍历功能,也不提供迭代器。若想进行遍历,可以将栈中元素取出放在数组中。

主要代码:

stack<int>s;
   int a[5],t=0;
   for(int i=1;i<=5;i++)
   { s.push(i);}
   while(t<5)
   {a[t++]=s.top();
   s.pop();}

4.2 stack赋值

stack<int>s={1,2,3}; //error  stack不可以用一组数直接初始化
stack<int>s(3);  //error stack不可以预先分配空间

vector<int>v={1,2,3};  // 栈中元素为1,2,3
stack<int,vector<int>>s1(v);

list<int>l={1,2,3};
stack<int,list<int>>s2(l);

deque<int>d={1,2,3};
stack<int,deque<int>>s3(d);
stack<int>s4(d);  //用deque为stack初始化时deque可省
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值