首页 > 其他分享 >stack 容器

stack 容器

时间:2024-06-21 20:28:53浏览次数:13  
标签:容器 cout 元素 push 拷贝 stack 构造函数

一 stack容器基本概念

        stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式如图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。

        有元素推入栈的操作称为:push,将元素推出stack的操作称为pop.

1.1 stack没有迭代器

        Stack所有元素的进出都必须符合”先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。Stack不提供遍历功能,也不提供迭代器。

示例代码:

stack<int> st;
        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);

        cout << "size:" << st.size() << endl;

        while(!st.empty())
        {
            //访问栈顶
            cout << st.top() << endl;
            //出
            st.pop();
        }

二 stack常用API

2.1 stack构造函数

底层:

stack<T> stkT;//stack采用模板类实现, stack对象的默认构造形式: 
stack(const stack &stk);//拷贝构造函数

示例代码:

 stack<int> v;
    v.push(1);
    v.push(2); // stack采用模板类实现, stack对象的默认构造形式:
    v.push(3);
     stack<int> v2(v); // 拷贝构造函数
    while(!v.empty())
    {
        cout << v.top() << endl;   //头
        v.pop();   //移除顶部成员
    }

    //  stack<int> v2(v); // 拷贝构造函数,注意拷贝时机,前输出的时候已经把栈里的成员全部异常,现在再拷贝则为空
    while (!v2.empty())
    {
        cout << v2.top() << endl; // 头
        v2.pop();                 // 移除顶部成员
    }

        特别注意:执行拷贝构造函数时,注意拷贝时机,前输出的时候已经把栈里的成员全部异常,现在再拷贝则为空。

2.2 stack赋值操作

底层:

stack& operator=(const stack &stk);//重载等号操作符

示例代码:

    stack<int> v;
    v.push(1);
    v.push(2); // stack采用模板类实现, stack对象的默认构造形式:
    v.push(3);v
    stack<int> v2 = v; // 拷贝构造函数


    while (!v2.empty())
    {
        cout << v2.top() << endl; // 头
        v2.pop();                 // 移除顶部成员
    }

2.3 stack数据存取操作

底层:

push(elem);//向栈顶添加元素
pop();//从栈顶移除第一个元素
top();//返回栈顶元素

示例代码:

     stack<int> v;
    v.push(1);
    v.push(2); 
    v.push(3); // 向栈顶添加元素
    v.pop();

    while (!v.empty())
    {
        cout << v.top() << endl; // 返回头
        v.pop();                 // 移除顶部成员
    }

2.4 stack大小操作

底层:

empty();//判断堆栈是否为空
size();//返回堆栈的大小

示例代码:

    stack<int> v;
    v.push(1);
    v.push(2); 
    v.push(3); // 向栈顶添加元素

    int a = v.empty(); 判断堆栈是否为空
    if(a == 0)
    {
        cout << "不是空" << endl;
    }
    else{
        cout << "空" << endl;
    }

    int b = v.size();

标签:容器,cout,元素,push,拷贝,stack,构造函数
From: https://blog.csdn.net/weixin_47378530/article/details/139855551

相关文章

  • 容器镜像安全:安全漏洞扫描神器Trivy
    目录一.系统环境二.前言三.Trivy简介四.Trivy漏洞扫描原理五.利用trivy检测容器镜像的安全性六.总结一.系统环境本文主要基于Dockerversion20.10.14和Linux操作系统Ubuntu18.04。服务器版本docker软件版本CPU架构Ubuntu18.04.5LTSDockerversion20.10.14x86_......
  • openstack相关疑问和解答
     galanceopenstack运行着的虚拟机在glance中的镜像删除的影响 OpenStack中运行的虚拟机与其在Glance中的镜像之间的关系是紧密的,但虚拟机的运行并不直接依赖于镜像的持久存在。然而,删除Glance中的镜像可能会产生一些影响,这些影响主要取决于删除的方式(如软删除、硬删除)以及虚......
  • 如何修改docker容器的重启策略(重启模式)?
    如何修改docker容器的重启策略(重启模式)?使用命令进行修改:dockercontainerupdate--restart=unless-stoppedmongodb示例:执行命令:执行后成功的结果:Docker容器的重启策略Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。Docker容器的重......
  • 【容器安全防线】Docker攻击方式与防范技术探究
    什么是Docker?Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。一个完整的Docker有以下几个部分组成:1、Doc......
  • 项目八 OpenStack存储管理
    任务一理解OpenStack块存储服务1.1 •Cinder的主要功能•提供持久性块存储资源,供Nova计算服务的虚拟机实例使用。•为管理块存储设备提供一套方法,对卷实现从创建到删除的整个生命周期管理。•将不同的后端存储进行封装,对外提供统一的API。......
  • 容器操作、应用部署
    [容器操作]1#1镜像操作2-dockersearch3-dockerpull4-dockerimages5-dockerrmi67#2镜像运行,变成容器---》一个镜像可以运行处多个容器--》把一个容器当成一个虚拟机8-操作系统9-文件10-软件11-网络 ......
  • 以沙箱的方式运行容器:安全容器Kata Containers
    目录一.系统环境二.前言三.KataContainers简介四.Gvisor与Kata区别对比五.配置docker使用kata作为runtime5.1安装docker5.2安装kata5.2.1在线安装(不推荐,下载非常慢)5.2.2使用rpm包离线安装(推荐)5.3配置docker支持kata作为runtime5.4docker使用kata作为runtime创建容器六......
  • k8s容器启动不了,一直重启, 报红提示Not Ready
    k8s容器启动不了,一直重启,报红提示NotReady反复多次重启后,才能够启动成功。发现是启动时间过长,不断达到了失败阈值,于是会不断重启。将failureThreshold、initialDelaySeconds、periodSeconds这几个参数设置大一些,就可以启动了。k8s探针类型及探针配置:详情见:https://blo......
  • docker 容器中,当需要读取外接usb 设备,每次插拔 sub 设备,设备编号一直变化怎么办?
    docker容器中,当需要读取外接usb设备,每次插拔sub设备,设备编号一直变化怎么办?这会影响程序的读取。因此每次创建容器时候,设备编号就固定在容器中了。比如:在容器中运行:root@h-pc:~/ros_ws#lsusbBus002Device002:ID174c:3074ASMediaTechnologyInc.ASM1074SuperSpee......
  • kvm镜像迁移到openstack集群,发现镜像文件有损
     因为没有停机然后复制或者是创建出来的镜像文件,有可能系统盘直接损坏了,修复一下之后,重新用它来生成虚拟机,可以正常使用了 修复命令:xfs_repair /dev/vda2 #这个不行用下面的,如果磁盘繁忙,umount一下xfs_repair-L /dev/vda2  【1】定义虚拟机,发现磁盘文件损坏了......