zoukankan      html  css  js  c++  java
  • stack

    先入后出,只有top的一个元素是可见的。在前面c语言部分已有图示,参考

    https://www.cnblogs.com/qifeng1024/p/12512765.html

    惯例引入头文件

    #include <stack>

    首先定义一个栈

    stack<string> s;

    这样做是没有问题的。

    但是我也可以在声明这个栈同时也规定底层容器

    stack<string,list(string)> s;

    同时也可以在声明的时候初始化这个栈

        vector<int> a{1,2,3,4};
        stack<int> s1;
        stack<int ,vector<int>> s2;
        stack<int ,vector<int>> s3(a);

    成员函数如下:

     这是网页自己翻译的其中有的不是很准

    int main()
    {
       vector<int> a{1,2,3,4,5,6,7,8};
    
        stack<int ,vector<int>> s(a);
    
    
        cout<<"size    :  "<<s.size()<<endl;    //栈大小
    
        if(s.empty())   //判断栈是否空
        {
            cout<<"empty :  empty"<<endl;
        }
        else
        {
            cout<<"empty  : full"<<endl;
        }
    
        cout<<"top data is :  "<<s.top()<<endl; //访问栈顶元素
        s.pop(); //移除栈顶元素
        cout<<"size    :  "<<s.size()<<endl;    //栈大小  
        cout<<"top data is :  "<<s.top()<<endl; //访问栈顶元素
        s.push(199);    //在栈顶加入元素
        cout<<"size    :  "<<s.size()<<endl;    //栈大小
        cout<<"top data is :  "<<s.top()<<endl; //访问栈顶元素
        s.emplace(17);  //栈顶加入元素
        cout<<"size    :  "<<s.size()<<endl;    //栈大小
        cout<<"top data is :  "<<s.top()<<endl; //访问栈顶元素
    
    }

    emplace函数直接构造而非拷贝元素。 
    调用insert或者push函数时,将对象当做参数传递,这些对象被拷贝到容器中。 
    调用emplace函数时,将对象传递给对应元素类型的构造函数,直接在内存中构造对象。

    empalce会在容器管理的内存空间中直接创建对象,调用push则会创建一个临时对象,然后将其压入容器。 
    显然这种方式更适合将类插入到某容器中,而且会调用构造函数,这就需要那个类有合适的构造函数,参数必须能匹配构造函数。

  • 相关阅读:
    25款有用的桌面版博客编辑器
    iOS开发- &quot;duplicate symbol for architecture i386&quot; 解决的方法
    中国眼下拥有的人造卫星的种类及其作用
    深入浅出JMS(一)——JMS简单介绍
    android之【本地通知Notification】
    蓝牙设计
    html5中的容器标签和文本标签
    amaze ui中的icon button
    amaze ui表格斑马纹效果
    amaze ui响应式表格
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12614943.html
Copyright © 2011-2022 走看看