C++STL学习笔记_(3)stack

10.2.4stack容器

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的数据存取

²  stack.top();           //返回最后一个压入栈元素

                   stack<int> stkIntA;

                   stkIntA.push(1);

                   stkIntA.push(3);

                   stkIntA.push(5);

                   stkIntA.push(7);

                   stkIntA.push(9);

 

                   int iTop = stkIntA.top();             //9

                   stkIntA.top() = 19;                      //19

stack的大小

²  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

                   }

 

示例代码:

#include<iostream>
using namespace std;
#include "stack"

//栈模型
//栈的算法 和 数据类型的分离
void main51()
{
    stack<int> s;

    //入栈
    for (int i = 0;i <10;i++)
    {
        s.push(i+1);
    }
    cout<<"栈的大小"<<s.size()<<endl;

    //出栈
    while (!s.empty())
    {
        int tmp  = s.top();  //获取栈顶元素
        cout<<tmp<<" ";
        s.pop();             //弹出栈顶元素
    }
}

//teacher节点
class Teacher
{
public:
    int age;
    char name[32];
public:
    void prinT()
    {
        cout<<"age:"<<age<<endl;
    }
};

void main52()
{
    Teacher t1,t2,t3;
    t1.age  = 31;
    t2.age  = 32;
    t3.age  = 33;

    stack<Teacher> s;
    s.push(t1);
    s.push(t2);
    s.push(t3);

    while (!s.empty())
    {
        Teacher tmp    = s.top();
        tmp.prinT();
        s.pop();
    }
}

void main53()
{
    Teacher t1,t2,t3;
    t1.age  = 31;
    t2.age  = 32;
    t3.age  = 33;

    stack<Teacher *> s;
    s.push(&t1);
    s.push(&t2);
    s.push(&t3);

    while(!s.empty())
    {
        Teacher *p = s.top();
        p->prinT();
        s.pop();
    }
}


void main()
{
    main51();
    main52();
    cout<<"hello...\n"<<endl;
    system("pause");
    return;
}

资料来源:传智播客

posted on 2017-01-08 21:42  金秀  阅读(267)  评论(0编辑  收藏  举报

导航