STL - stack(栈)

来源:互联网 发布:前端优化实现etag 编辑:程序博客网 时间:2024/05/21 06:33
Stack简介
stack是堆栈容器,是一种“先进后出”的容器。
stack是简单地装饰deque容器而成为另外的一种容器。
#include <stack>
stack对象的默认构造
stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT;
stack <int> stkInt; //一个存放int的stack容器。
stack <float> stkFloat; //一个存放float的stack容器。
stack <string> stkString; //一个存放string的stack容器。
...

//尖括号内还可以设置指针类型或自定义类型。

stack的push()与pop()方法 stack.push(elem);   //往栈头添加元素stack.pop();   //从栈头移除第一个元素stack<int> stkInt;  stkInt.push(1);stkInt.push(3);stkInt.pop();   stkInt.push(5);stkInt.push(7);  stkInt.push(9);stkInt.pop();   stkInt.pop();  此时stkInt存放的元素是1,5  stack对象的拷贝构造与赋值stack(const stack &stk);     //拷贝构造函数stack& operator=(const stack &stk);//重载等号操作符stack<int> stkIntA;stkIntA.push(1);stkIntA.push(3);stkIntA.push(5);stkIntA.push(7);stkIntA.push(9);stack<int> stkIntB(stkIntA);//拷贝构造stack<int> stkIntC;stkIntC = stkIntA;//赋值stack的数据存取<span style="white-space:pre"></span>stack.top();  //返回最后一个压入栈元素stack<int> stkIntA;stkIntA.push(1);stkIntA.push(3);stkIntA.push(5);stkIntA.push(7);stkIntA.push(9);int iTop = stkIntA.top();//9stkIntA.top() = 19;//19stack的大小stack.empty();   //判断堆栈是否为空stack.size();      //返回堆栈的大小stack<int> stkIntA;stkIntA.push(1);stkIntA.push(3);stkIntA.push(5);stkIntA.push(7);stkIntA.push(9);if (!stkIntA.empty()){int iSize = stkIntA.size();//5}

demo

#include <iostream>#include <cstdio>#include <stack>#include <algorithm>using namespace std;void stackInit(){stack<int> s;// 入栈for (int i = 0; i < 10; ++i) {s.push(i + 1);}cout << "size of s: " << s.size() << endl;while (!s.empty()) {cout << s.top() << ' '; // 获取栈顶元素s.pop(); // 弹出栈顶元素}cout << endl;}class Teacher{public:int age;char name[32];public:void printTeacher(){cout << "age: " << age << endl;}};void stackClass(){Teacher t1, t2, t3;t1.age = 21;t2.age = 22;t3.age = 23;stack<Teacher> s;s.push(t1);s.push(t2);s.push(t3);while (!s.empty()) {Teacher tmp = s.top();s.pop();tmp.printTeacher();}/*age: 23age: 22age: 21*/cout << endl;}void stackClassP(){Teacher t1, t2, t3;t1.age = 21;t2.age = 22;t3.age = 23;stack<Teacher *> s;s.push(&t1);s.push(&t2);s.push(&t3);while (!s.empty()) {Teacher *tmp = s.top();s.pop();tmp->printTeacher();}/*age: 23age: 22age: 21*/}int main(){stackInit();stackClass();stackClassP();return 0;}

0 0