stack 栈是一种只在一端(栈顶)进行数据插入(入栈)和删除(出栈)的数据结构,它满足后进先出(LIFO)的特性。
使用push(入栈)将数据放入stack,使用pop(出栈)将元素从容器中移除。
使用stack,必须包含头文件:
#include<stack>
在头文件中,class stack定义如下:
namespace std{
template <typename T,
typename Container = deque<T>>
class stack;
}
第一个参数T代表类型,第二个参数用来定义stack内部存放数据的容器,默认为deque。之所以选择deque而非vector,是因为deque移除数据时可能会释放内存,并在插入数据需要扩容时不需要复制所有的数据。
例如,以下定义了一个元素类型为整数的 stack:
std::stack<int> st;
stack 只是很单纯地把各项操作转化为内部容器对应的函数调用。你可以使用任何支持 back()、push_back()和pop_back()成员函数的标准容器支持 stack。例如你可以使用 vector或list 来存放数据:
stack<int,vector<int>> st;//整型栈,使用vector存放数据
注意:forword_lis和array不可以作为其容器
定义及初始化
#include <iostream>
#include <stack>
#include <vector>
#include <list>
using namespace std;
int main()
{
stack <char> s1;//创建一个默认的栈,最常用
stack <char, deque<char> > s2;//显示创建用deque保存数据的栈,和s1等价
stack <int, vector<int> > s3;//创建用vector保存数据的栈
stack <int, list<int> > s4;//创建用list保存数据的栈
return 0;
}
empty成员函数
判断栈是否为空。
pop成员函数
出栈函数,删除栈顶元素。
push成员函数
入栈函数,往栈顶添加数据
size成员函数
返回栈的数据个数
top成员函数
返回栈顶元素的引用。
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>s1;//创建一个空的int栈
if (s1.empty())
cout << "s1是空的" << endl;
for(int i=0;i<5;i++)//入栈0,1,2,3,4
s1.push(i);
cout << "入栈0~4后,栈内的数据个数:" << s1.size() << endl;
cout << "出栈:" << endl;
while (!s1.empty())//只要栈不空,循环继续
{
cout << s1.top() << endl;//输出栈顶元素的值
s1.pop();//出栈,删除栈顶元素的值
}
return 0;
}
本篇完!