首页 > 其他 > 详细

stack

时间:2020-04-01 20:08:53      阅读:52      评论:0      收藏:0      [点我收藏+]

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

 

stack

原文:https://www.cnblogs.com/qifeng1024/p/12614943.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!