C++中的stack(容器适配器)

news2024/9/20 20:28:25

目录

一、成员函数 

一、构造函数

二、入栈

三、出栈

四、判空 empty ()

五、栈大小 size

六、取栈顶元素  top

七、入栈 emplace

八、交换函数 swap

二、非成员函数重载

一、关系运算符重载

二、交换函数


C++中的stack不再是容器,而是容器适配器

注意:stack不再支持迭代器,因为stack必须保证先进后出

一、成员函数 

一、构造函数

1.默认构造函数 explicit stack (const container_type& ctnr = container_type())

(声明为explicit的函数不能进行隐式类型转换使用)

stack<int> st;

二、入栈

void push (const value_type& val)

stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);

三、出栈

void pop ()

四、判空 empty ()

bool empty () const 

stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
while (!st.empty()) st.pop();

五、栈大小 size

szie_type size() const 

stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
cout << st.size() << endl;//10

六、取栈顶元素  top

value_type& top ()

const value_type& top () const

stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
cout << st.top() << endl;//9

七、入栈 emplace

template <class... Args> void emplace (Args&&... args)

对于内置类型,emplace和push的功能一样,没有区别;对于自定义类型,使用push前必须先将要入栈的对象实例化出来,而emplace可以直接传入对象的构造参数

总结:push的功能emplace都具有,但是push需要先将对象构造好,再拷贝过去压入栈中;而empalce可以自动调用要插入对象的构造函数构造出对象,并直接入栈。emplace相比于push省去了拷贝的步骤,更加节省内存。

stack<pair<int, char>> st;
pair<int, char> pr(10, 'a');
st.push(pr);
st.emplace(20, 'b');

八、交换函数 swap

void swap (stack& x) noexcept 

交换两个栈的数据

stack<int> st1;
st1.push(1); st1.push(1); st1.push(1);
stack<int> st2;
st2.push(2); st2.push(2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 3 st2_size(): 2
st1.swap(st2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 2 st2_size(): 3

二、非成员函数重载

一、关系运算符重载

(1)
template <class T, class Container>
  bool operator== (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
(2)
template <class T, class Container>
  bool operator!= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
(3)
template <class T, class Container>
  bool operator<  (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
(4)
template <class T, class Container>
  bool operator<= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
(5)
template <class T, class Container>
  bool operator>  (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
(6)
template <class T, class Container>
  bool operator>= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);

二、交换函数

template <class T, class Container>

void swap (stack<T, Container>& x, stack<T, Container>& y) noexcept

stack<int> st1;
st1.push(1); st1.push(1); st1.push(1);
stack<int> st2;
st2.push(2); st2.push(2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 3 st2_size(): 2
swap(st1, st2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 2 st2_size(): 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解汽车充电桩主板的硬件设计与软件系统

随着电动汽车时代的到来&#xff0c;充电桩逐渐成为城市新地标。而在每一个充电桩的核心&#xff0c;隐藏着一颗强大的“心脏”——充电桩主板。 充电桩主板是充电桩的核心部件&#xff0c;决定着充电桩的充电效率、安全和用户体验。今天&#xff0c;我们将深入探索汽车充电桩主…

ubuntu18.04安装F4PGA教程

环境搭建教程&#xff1a; f4pga-arch-defs/xilinx/xc7 at main f4pga/f4pga-arch-defs GitHub git clone https://github.com/SymbiFlow/f4pga-arch-defs.git cd f4pga-arch-defs make env cd build 主要是make env&#xff0c;会下载很多东西&#xff0c;然后生成很多描…

账号安全基本措施2

sudo命令 sudo(superuser do)&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。 其配置在/etc/sudoers权。它允许系统管理员集中的管理用户的使用权限和使用的主机。属性必须为0440。 语法检查&#xff1a; 检查语法&#xff1a; 修改文件时&…

Mysql学习一

目录 1.启动数据库&#xff1a; 2.命令行连接到MySQL&#xff08;winr输入cmd&#xff09; 3.MySQL的三重结构&#xff1a; 4.SQL语句分类&#xff1a; 1.启动数据库&#xff1a; winr——输入services.msc进入本地服务 2.命令行连接到MySQL&#xff08;winr输入cmd&#x…

【Linux】学习记录_14_线程

14 线程 14.1 线程和进程 进程是资源管理的最小单位&#xff0c;每个进程都有数据段、代码段和堆栈段&#xff0c;进程切换时都有复杂的上下文切换等动作。进程切换上下文时&#xff0c; 需要重新映射虚拟地址空间、进出OS内核、寄存器切换&#xff0c;还会干扰处理器的缓存机…

关于agi中的Function Calling深入解析

接口(Interface) 两种常见接口&#xff1a; 1、人机交互接口&#xff0c;User Interface,简称UI 2、应用程序编程接口&#xff0c;Application Programming Interface,简称API 接口能【通】的关键&#xff0c;是两边都要遵守约定。 人要按照UI的设计来操作。UI的设计要符合…

easyexcel升级3.3.4失败的经历

原本想通过easyexcel从2.2.6升级到3.3.3解决一部分问题&#xff0c;结果之前的可以用的代码&#xff0c;却无端的出现bug 1 Sheet index (1) is out of range (0…0) 什么都没有改&#xff0c;就出了问题&#xff0c;那么问题肯定出现在easyexcel版本自身.使用模板填充的方式进…

从构成看自来水厂自动化控制系统的创新与发展

自来水厂自动化控制系统涵盖了多个关键组成部分&#xff0c;包括水管理云平台、供水监控系统以及供水调度平台。 系统内嵌了一系列自主创新的核心算法&#xff0c;这些算法结合了数学建模、机器仿真和流体力学等多元数据模型&#xff0c;以优化设备间的关联和控制关系&#xf…

top实时系统监控工具-读书笔记(十一)

top 是 Linux 系统中一个非常实用的实时系统监控工具&#xff0c;它可以实时显示系统中各个进程的资源使用情况&#xff0c;包括 CPU 占用率、内存占用量、进程运行状态等信息。 命令格式 top 的基本格式如下&#xff1a; top [选项] 常用选项及其作用 -d 或 --delsay&…

Php-WebView 现代跨平台 GUI分享

GitHub :php-webview 一个用于 C/C 的小型跨平台 Web 视图库&#xff0c;用于构建现代跨平台 GUI。 该项目的目标是为最广泛使用的平台创建一个通用的 HTML5 UI 抽象层。 它支持双向 JavaScript 绑定&#xff08;从 C/C 调用 JavaScript 和从 JavaScript 调用 C/C&#xff09;。…

算法刷题-15

3.31 笔试真题2/5 皇后攻击位置 国际象棋比赛上&#xff0c;行数是数字1-8&#xff0c;列数是字母a到h&#xff0c;比如第二行第四列就是d2 现在在某位置放置一个皇后的话&#xff0c;皇后能攻击到的位置有哪些&#xff08;皇后攻击直线与斜线&#xff09; 输入&#xff1…

LMbench单独执行某一个组件 | benchmark教程

LMbench官网 > https://lmbench.sourceforge.net/man/ 下载源码&#xff0c;编译得到的Benchmark是由很多文件组成的&#xff0c;上面的链接中官方给出了每个组件的各参数的含义&#xff0c;可以对照着修改使用&#xff0c;以达到测试在某个组件上表现的作用。 以bw_mem为例…

【学习分享】通俗易懂!最早(晚)开始时间

【学习分享】通俗易懂&#xff01;最早&#xff08;晚&#xff09;开始时间 前言一、什么是最早&#xff08;晚&#xff09;开始时间&#xff1f;二、什么是关键路径&#xff1f;三、实例四、小结 前言 看了这么多篇求解最早开始时间和最晚开始时间的文章&#xff0c;结果一篇…

RTSP/Onvif视频监控平台EasyNVR如何提高匿名用户的用户名和密码安全性?

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xff0c;能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、W…

vue3中所有页面需要手动刷新一下才能显示,控制台没有报错

1.问题 登录进来是进入首页&#xff0c;然后切换任何页面都是空白&#xff0c;但是控制台没有报错。在其他页面刷新后却能显示&#xff0c;然而切换到首页刷新后再切换到其他页面又是空白。 2.解决问题 原因&#xff1a;在于首页给了两个根标签&#xff0c;我把其中一个根标签…

解决VSCode中“#include错误,请更新includePath“问题

目录 1、问题原因 2、解决办法 1、问题原因 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCo…

ROM修改进阶教程------安卓7_____安卓13去除签名验证操作步骤解析

同类博文: 安卓玩机搞机技巧综合资源-----修改rom 制作rom 解包rom的一些问题解析【二十一】_qcn改区域锁-CSDN博客 安卓系列机型rom修改。如果你删减了系统相关的app。那么严重会导致开机系统卡米 定屏等问题。这类一般都是系统签名验证导致的。而破解签名验证一般都是修改…

JsonPath实战

概述 JsonPath&#xff0c;GitHub是一种简单的方法来提取给定JSON文档的部分内容&#xff0c;提供类似正则表达式的语法来解析JSON文档。 特性 入门 引入如下Maven依赖&#xff1a; <dependency><groupId>com.jayway.jsonpath</groupId><artifactId&…

Centos7虚拟机与真机乎ping以及虚拟机ping不通的原因

虚拟机网络完全正常的标准 物理机可以ping通虚拟机的IP虚拟机可以ping通物理机的IP虚拟机可以ping通baidu.com等网站 使用工具版本&#xff1a;Centos7 前提&#xff1a; 虚拟机必须开机才可以连接访问 克隆出来的虚拟机一定要手动修改IP&#xff0c;IP冲突的情况下不能联网 …

会员邀请:中华环保联合会征集会员单位、行业专家

为进一步发展壮大会员队伍&#xff0c;我们将充分吸收水环境治理领域具有先进理念、技术创新、表现突出的优秀企事业单位作为会员。依托院士、专家团队的技术力量为企业、园区、区域流域、地方政的水环境问题提供全过程一站式服务;为企业搭建全产业链布局的专业服务平台&#x…