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

目录

一、成员函数 

一、构造函数

二、入栈

三、出栈

四、判空 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.mfbz.cn/a/559811.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[InternLM训练营第二期笔记]4. XTuner 微调 LLM:1.8B、多模态、Agent

该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。 该笔记是第四节课&#xff0c;学习大语言模型微调的基本概念&#xff0c;以及利用XTuner工具进行微调。 0. 什么是LLM中的微调 0.1 两种Finetune范式 微调的目的是为了让foundation模型在特定的领域更好地发挥…

力扣练习题(2024/4/18)

1不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff08;非水平线…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计&#xff0c;如下&#xff1a; select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…

【人工智能基础】状态空间搜索

状态空间法 状态空间&#xff1a;一个问题全部可能的状态以及其关系的集合。 状态空间图&#xff1a;以图的形式表示问题的状态空间&#xff0c;节点对应状态&#xff0c;边对应状态转移算子&#xff0c;边上的权对应转移所需的代价 问题的解&#xff1a;是从最开始状态到目…

BP使用和弱口令漏洞

目录 一、BP使用 1.BP设置 2.Proxy 3.Reapter 4.Decord 5.Intruder 二、弱口令爆破 1.服务弱口令爆破 2.验证码绕过 一、BP使用 1.BP设置 设置代理的监听端口: 这里设置为本机的9090端口 2.Proxy 浏览器要挂代理&#xff0c;设置为本机的9090端口 打开拦截功能 当浏览…

Youtube DNN

目录 1. 挑战 2. 系统整体结构 3.召回 4. 排序 5. 训练和测试样本的处理 1. 挑战 &#xff08;1&#xff09;规模。很多现有的推荐算法在小规模上效果好&#xff0c;但Youtobe规模很大。 &#xff08;2&#xff09;新颖度。Youtobe语料库是动态的&#xff0c;每秒都会有…

Windows如何安装JDK

JDK和JRE简介 JDK&#xff1a;Java Development ToolKit java开发工具包&#xff0c;包含JRE针对java程序开发者 JRE&#xff1a;Java Runtime Environment java程序的运行环境针对java使用者来说 下载JDK&#xff0c;进入官网下载 Oracle官网 双击下载好之后的exe文件&#…

关于Python中install edge_tts记录

如下代码&#xff1a; #!/usr/bin/env python3""" Basic audio streaming example.This example shows how to stream the audio data from the TTS engine, and how to get the WordBoundary events from the engine (which could be ignored if not needed).…

分保、等保、关保、密评之间联系与区别

分保、等保、关保、密评之间联系与区别 什么是“三保一评”分保等保关保密评 相关的法律法规依据分保等保关保密评 分保工作简介分保工作流程分级保护技术要求 等保工作简介关保工作简介密评工作简介三保一评联系与区别 什么是“三保一评” 分保 涉密信息系统分级保护 指涉密信…

vivado 存储器校准调试

存储器校准调试 Vivado 中的存储器接口 IP 支持校准调试。其中存储有实用的核配置、校准和数据窗口信息 &#xff0c; 可在 Vivado 硬件管理器 中访问这些信息。“存储器校准调试 (Memory Calibration Debug) ”可随时用于读取此信息 &#xff0c; 并从存储器接口 IP 中获…

Linux命令学习—Iptables 防火墙(上)

1.1、防火墙 1、防火墙的定义 所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上 构造的保护屏障.是一种获取安全性方法的形象说法&#xff0c;它是一种计算机硬件和软件的结合&#xff0c;使 Internet 与 Intranet 之间建立起…

LeetCode216:组合总和Ⅲ

题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 解题思想 使用回溯算法 代码 class So…

代理IP对网络爬虫有什么影响?

代理IP对网络爬虫的影响深远且多方面&#xff0c;主要体现在以下几个方面&#xff1a; 第一点&#xff0c;代理IP能有效防止爬虫IP被封禁&#xff1a;在爬虫工作过程中&#xff0c;如果频繁访问同一目标网站&#xff0c;很容易被该网站的服务器识别为恶意行为&#xff0c;导致…

【大数据】Apache Knox 概述

Apache Knox 概述 1.概述1.1 Kerberos 封装1.2 简化客户端证书的管理1.3 Apache Ranger 集成1.4 Hadoop URLs VS Knox URLs 2.自定义 Apache Knox2.1 Topology2.2 Provider2.3 Services2.4 Personalized services 3.Tips3.1 Setting up SSL3.2 常见问题3.2.1 Bulky answer3.2.2…

【JavaSE】JDK17的一些特性

前言 从springboot3.0开始&#xff0c;已经不⽀持JDK8了 选⽤Java17&#xff0c;概括起来主要有下⾯⼏个主要原因 JDK17是LTS(⻓期⽀持版)&#xff0c;可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版&#xff08;JDK9-JDK16&#xff09; 去其糟粕&#xff0c;取其精华的版本JDK17…

hbase基础(二)

HBase第二天 名称空间 namespace&#xff1a;名称空间默认hbase有两个名称空间&#xff0c;default、hbasedefault名称空间是默认创建表的位置&#xff0c;hbase是专门存放系统表的名称空间&#xff08;namespace、meta&#xff09;管理命名空间指令 create_namespace 命名空…

qt tcp 连接 秒断连,求助

问题&#xff1a; tcp连接总是秒成功后断连 debug会出现下面这些 onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!00007FFDA2A1D93D: (caller: 00007FFDD8BEACF6) LogHr(1) tid(336c) 8007277C ¡£¡£ one…

小型企业网络优化加速方案

随着数字化经济蓬勃发展&#xff0c;小型企业的网络基础设施变得尤为重要。在这一浪潮中&#xff0c;建立一个稳定、高效的企业网络成为支撑业务发展的关键。本文将深入研究针对小型企业设计的网络优化加速方案&#xff0c;助力企业主了解如何规划和实施适合自身业务需求的网络…

Spring Boot 统一功能处理(三)

本篇主要介绍Spring Boot的统一异常处理。 目录 一、统一异常处理的使用 二、测试统一异常处理效果 三、浅析原理 ControllerAdvice简析 统一处理异常简析 一、统一异常处理的使用 在前面介绍统一数据返回时&#xff0c;我们在程序发生异常时会把整个报错信息都封装在da…

BRC20铭文铭刻解析

BRC20铭文铭刻的出现对于智能制造无疑是一个重要的里程碑。随着科技的飞速发展&#xff0c;智能制造已经成为制造业发展的必然趋势&#xff01;智能制造是指通过运用人工智能、物联网、大数据等先进技术&#xff0c;实现生产过程的自动化、智能化和高效化。 1. BRC20铭文的概念…