zoukankan      html  css  js  c++  java
  • 【STL】stack容器

    Stack简介

    • stack是堆栈容器,是一种“先进后出”的容器。
    • stack是简单地装饰deque容器而成为另外的一种容器。
    • #include<stack>

    stack对象的默认构造

    stack采用模板类实现
    stack <T> stkT;        // stack对象的默认构造形式
    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();   
    

    stack对象的拷贝构造与赋值

    • stack(const stack &stk); //拷贝构造函数
    • stack& operator=(const stack &stk); //重载等号操作符
    stack<int> stkIntA;
    stkIntA.push(1);
    stkIntA.push(3);
    stkIntA.push(5);
    
    stack<int> stkIntB(stkIntA);		//拷贝构造
    stack<int> stkIntC;
    stkIntC = stkIntA;				//赋值
    

    stack的数据存取

    • stack.top(); //返回最后一个压入栈元素
    stack<int> stkIntA;
    stkIntA.push(1);
    stkIntA.push(3);
    stkIntA.push(5);
    		
    int iTop = stkIntA.top();	//5
    stkIntA.top() = 19;			//19
    

    stack的大小

    • stack.empty(); //判断堆栈是否为空
    • stack.size(); //返回堆栈的大小
    stack<int> stkIntA;
    stkIntA.push(1);
    stkIntA.push(3);
    stkIntA.push(5);
    
    if (!stkIntA.empty())
    {
    	int iSize = stkIntA.size();		//3
    }
    

    应用案例

    //栈模型
    #include <iostream>
    #include "stack"
    
    using namespace std;
    
    //栈的算法 和 数据类型的分离
    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 printT()
        {
            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.printT();
            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->printT();
            s.pop();
        }
    }
    
    int main()
    {
        main51();
        //main52();
        //main53();
        cout << "hello..." << endl;
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    leetcode 62. Unique Paths
    leetcode 345. Reverse Vowels of a String
    leetcode 344. Reverse String
    Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装
    yarn调度器 FairScheduler 与 CapacityScheduler
    Hive性能优化
    HBase笔记
    Zookeeper笔记
    Hadoop组件详解(随缘摸虾)
    ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建
  • 原文地址:https://www.cnblogs.com/tazimi/p/13322691.html
Copyright © 2011-2022 走看看