• 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则会创建一个临时对象,然后将其压入容器。 
    显然这种方式更适合将类插入到某容器中,而且会调用构造函数,这就需要那个类有合适的构造函数,参数必须能匹配构造函数。

  • 相关阅读:
    Delphi系统变量:IsMultiThread对MM的影响
    Delphi7中 string, AnsiString, Utf8String,WideString的区别分析
    Delphi之TComponent类
    delphi -----(去掉窗口最大化,最小化、关闭),主窗口,和子窗口之间的设置
    Application.Title与Application.MainFormOnTaskbar之间的关系
    DELPHI用户登录窗口框架
    Element 1.2.7 发布,饿了么 Vue 2.0 组件库
    用Delphi实现网络视频编程
    甘超波:NLP是什么?
    OpenCV使用filter2D实现图像对比度提升
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12614943.html
Copyright © 2020-2023  润新知