【STL——stack容器】
引入
stack(栈)容器是一种先进后出的容器,两端只有一个开口,只能从这一个开口插入和删除数据。可以想象成量杯,如果分批次放满麦子,从杯口放入且从杯口取,先取的一定是最上面那层的麦子,也就是最后放的。麦子的存取顺序就是先进后出(或后进先出)。
在前面已经发布的栈这一篇中有更多例图供参考,可自行查看:数据结构——栈
在C++中使用该容器,需要加头文件stack:
#include < stack>
构造函数
- 默认构造函数,拷贝构造函数,赋值函数
void testQ() {stack <int> stkT; //默认构造函数stack<int> s1(stkT); //拷贝构造函数//赋值函数:重载等号操作符
//在C++中,赋值操作符(operator=)必须作为类的成员函数出现class stack {public://在类内部声明时,我们通常不需要写模板参数Tstack& operator=(const stack& stkT);};}
数据存取
push(elem);//向栈顶添加元素
pop();//从栈顶移除第一个元素
top();//返回栈顶元素
void testQ() {stack <int> stk; stk.push(11);stk.push(22);stk.push(33); //11,22,33依次入栈cout<<stk.top()<<endl; //获得栈顶元素:33stk.pop(); //栈顶元素33出栈,还剩11、22stk.pop(); //栈顶元素22出栈,还剩11cout<<stk.top(); //获得栈顶元素:11}
判空与大小
empty();//判断堆栈是否为空
size();//返回堆栈的大小
void testQ() {stack <int> stk; stk.push(11);stk.push(22);stk.push(33); //11,22,33依次入栈cout<<stk.size()<<endl; //获得栈大小:3stk.pop(); //栈顶元素33出栈,还剩11、22stk.pop(); //栈顶元素22出栈,还剩11cout << stk.empty() << endl; //判空:不为空,输出0stk.pop(); //栈顶元素11出栈,为空栈cout << stk.empty(); //判空:为空,输出1}
例题
输入一个十进制整数,输出对应的二进制数。
void testQ() {stack<int> stk;int n = 0;cin >> n;while (n) {stk.push(n % 2);n /= 2;}while (!stk.empty()) {cout << stk.top();stk.pop();}}