首页 > 其他分享 >stack

stack

时间:2024-08-20 22:50:45浏览次数:9  
标签:初始化 容器 栈顶 参数 stack 底层

stack

定义一个用来存放字符串对象的 stack 容器:

stack<string> words;

stack 容器适配器的模板有两个参数。第一个参数是存储对象的类型,第二个参数是底层容器的类型。stack<T> 的底层容器默认是 deque<T> 容器,因此模板类型其实是 stack<typename T, typename Container=deque<T>>。通过指定第二个模板类型参数,可以使用任意类型的底层容器,只要它们支持 back()push_back()pop_back()empty()size() 这些操作。下面展示了如何定义一个使用 list<T> 的堆栈:

stack<string,list<string>> fruit;

创建堆栈时,不能在初始化列表中用对象来初始化,但是可以用另一个容器来初始化,只要堆栈的底层容器类型和这个容器的类型相同。

list<double> values{1.414, 3.14159265, 2.71828};
stack<double, list<double>> my_stack(values);

第二条语句生成了一个包含 value 元素副本的 my_stack。这里不能在 stack 构造函数中使用初始化列表;必须使用圆括号。如果没有在第二个 stack 模板类型参数中将底层容器指定为 list,那么底层容器可能是 deque,这样就不能用 list 的内容来初始化 stack;只能接受 deque。

stack<T> 模板定义了拷贝构造函数,因而可以复制现有的 stack 容器:

stack<double,list<double>>copy_stack {my_stack}

copy_stack 是 my_stack 的副本。如你所见,在使用拷贝构造函数时,既可以用初始化列表,也可以用圆括号。

堆栈操作

和其他序列容器相比,stack 是一类存储机制简单、所提供操作较少的容器。下面是 stack 容器可以提供的一套完整操作:

  • top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
  • push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
  • push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
  • pop():弹出栈顶元素。
  • size():返回栈中元素的个数。
  • empty():在栈中没有元素的情况下返回 true。
  • emplace():用传入的参数调用构造函数,在栈顶生成对象。
  • swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

标签:初始化,容器,栈顶,参数,stack,底层
From: https://www.cnblogs.com/sprinining/p/18370490

相关文章

  • 欧拉回路 模版dfs stack两种版本
    stack堆栈代替dfs版本//欧拉模版.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///**https://loj.ac/p/10105有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次。一共两个子任务:这张图是无向图。(50分......
  • 《安富莱嵌入式周报》第341期:Stack Overflow调查报告分享开发者年薪情况,开源USB高速分
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104视频版:https://www.bilibili.com/video/BV1Gw4m1k7jw目录:1、开源多功能USB2.0高速分析仪2、开源100W微型无刷伺服电机控制器3、MicroChip新款DSC系单片机集成40Msps12bitAD......
  • torch.stack 堆叠函数帮助理解多维数组
    概论在PyTorch中,torch.stack函数用于在指定的维度上将一组张量堆叠起来。这个操作会在指定维度上创建一个新的维度,并将输入张量在该维度上进行堆叠。假设有两个形状相同的张量a和b,它们的形状都是(2,3,4),那么在不同的dim参数下使用torch.stack会产生不同的结果。以......
  • HarmonyOS 层叠布局:(Stack)打造灵活多变的UI界面
    在应用开发中,布局设计是用户体验的关键之一。而在HarmonyOS中,层叠布局(Stack)是一种极为灵活的布局方式。它允许我们在同一个区域内放置多个组件,并根据需求将它们叠加起来,形成丰富的视觉效果。无论是广告展示还是卡片叠加效果,层叠布局都能轻松胜任。今天,我将带大家深入了解Stack......
  • 面试题:在Java中,JVM(Java虚拟机)的内存模型是如何设计的?请详细解释堆(Heap)、栈(Stack)、方法
    面试题:在Java中,JVM(Java虚拟机)的内存模型是如何设计的?请详细解释堆(Heap)、栈(Stack)、方法区(MethodArea)以及程序计数器(ProgramCounterRegister)的作用和它们之间的关系。更多答案在这里,手机或电脑浏览器就可以打开,面霸宝典【全拼音】.com这里可以优化简历,模拟面试,企业项......
  • EVAT: Electric Vehicle Adoption Tools - Tech Stack Overview
    EVAT:ElectricVehicleAdoptionTools-TechStackOverviewIntroductionWelcometotheEVATproject!ThisdocumentprovidesanoverviewofthetechnologiesweareusingtodevelopourElectricVehicleAdoptionTools.Ourgoalistocreateauser-friendlyp......
  • redis-stack安装
    下载:https://github.com/redis-stack/redis-stack/releases/tag/v7.2.0-v10 Linux解压后重命名为redis-stack放到opt目录port6379protected-modenodaemonizenorequirepass密码loadmodule/opt/redis-stack/lib/rediscompat.soloadmodule/opt/redis-stack/lib/re......
  • C++ 适配器 stack
    不了解适配器的读者可以先去看一看这一篇博客:C++适配器-CSDN博客栈数据结构介绍我们平时洗碗的时候,叠成一层层的碗最后只能从上面往下面开始拿;平时箱子里面叠的衣服,也是只能从上面慢慢拿。先放进去的东西后拿出来,这种内存特点的数据结构就叫栈。就像一个只有单边口的容器......
  • SQL进阶技巧:利用Stack()函数进行列转行及动态列转行方法
    目录0需求描述1数据分析 2 stack()函数应用stack(intn,v_1,v_2,...,v_k)n设为3,将后面6个元素按顺序分为3行2列n设为2,将后面6个元素按顺序分为2行3列n设为3,将后面7个元素按顺序分为3行3列n设为6,将后面6个元素转为为6行1列 3小结0需求描述在hive数仓中......
  • LeetCode | 225 Implement Stack Using Queues
    分析阻塞(Blocking)阻塞操作指的是在调用一个函数或方法时,如果该操作不能立即完成(例如,因为需要等待某个事件的发生,如数据达到或资源可用),那么当前线程或进程会被挂起(暂停执行),直到操作完成为止。在这个等待期间,线程或进程无法执行其他任务。等待:调用方必须等待操作完成独......