C++之模板(二)

1、类模板

2、使用类模板

类模板在使用的时候要显示的调用是哪种类型,而不是像函数模板一样能够根据参数来推导出是哪种类型。

Stack.h

#include <stdexcept>template <typename T>
class Stack
{
public:explicit Stack(int maxSize);~Stack();void Push(const T& elem);void Pop();T& Top();const T& Top() const;bool Empty() const;private:T* elems_;int maxSize_;int top_;
};template <typename T>
Stack<T>::Stack(int maxSize) : maxSize_(maxSize), top_(-1)
{elems_ = new T[maxSize_];
}template <typename T>
Stack<T>::~Stack() {delete []elems_;
}template <typename T>
void Stack<T>::Push(const T& elem)
{if (top_ + 1 >= maxSize_){throw std::out_of_range("Stack<T>::Push stack full");}elems_[++top_] = elem;
}template <typename T>
void Stack<T>::Pop()
{if (top_ + 1 <= 0){throw std::out_of_range("Stack<T>::Pop stack empty");}--top_;
}template <typename T>
T& Stack<T>::Top()
{if (top_ + 1 <= 0){throw std::out_of_range("Stack<T>::Top stack empty");}return elems_[top_];
}template <typename T>
const T& Stack<T>::Top() const
{if (top_ + 1 <= 0){throw std::out_of_range("Stack<T>::Top stack empty");}return elems_[top_];
}template <typename T>
bool Stack<T>::Empty() const {return top_ + 1 == 0;
}

main.cpp

#include <iostream>
using namespace std;
#include "Stack.h"
int main() {Stack<int> s(10);s.Push(1);s.Push(2);s.Push(3);while (!s.Empty()){cout << s.Top() << endl;s.Pop();}return 0;
}// 输出
3
2
1

3、非类型模板参数

Stack2.h

#include <stdexcept>template <typename T, int MAX_SIZE>
class Stack2
{
public:Stack2();~Stack2();void Push(const T& elem);void Pop();T& Top();const T& Top() const;bool Empty() const;private:T* elems_;int top_;
};template <typename T, int MAX_SIZE>
Stack2<T, MAX_SIZE>::Stack2() : top_(-1)
{elems_ = new T[MAX_SIZE];
}template <typename T, int MAX_SIZE>
Stack2<T, MAX_SIZE>::~Stack2() {delete []elems_;
}template <typename T, int MAX_SIZE>
void Stack2<T, MAX_SIZE>::Push(const T& elem)
{if (top_ + 1 >= MAX_SIZE){throw std::out_of_range("Stack2<T>::Push stack full");}elems_[++top_] = elem;
}template <typename T, int MAX_SIZE>
void Stack2<T, MAX_SIZE>::Pop()
{if (top_ + 1 <= 0){throw std::out_of_range("Stack2<T>::Pop stack empty");}--top_;
}template <typename T, int MAX_SIZE>
T& Stack2<T, MAX_SIZE>::Top()
{if (top_ + 1 <= 0){throw std::out_of_range("Stack2<T>::Top stack empty");}return elems_[top_];
}template <typename T, int MAX_SIZE>
const T& Stack2<T, MAX_SIZE>::Top() const
{if (top_ + 1 <= 0){throw std::out_of_range("Stack2<T>::Top stack empty");}return elems_[top_];
}template <typename T, int MAX_SIZE>
bool Stack2<T, MAX_SIZE>::Empty() const {return top_ + 1 == 0;
}

main.cpp

#include <iostream>
using namespace std;
#include "Stack2.h"
int main() {Stack2<int, 10> s;s.Push(1);s.Push(2);s.Push(3);while (!s.Empty()){cout << s.Top() << endl;s.Pop();}return 0;
}// 输出
3
2
1

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

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

相关文章

银河麒麟桌面操作系统V10SP1【FTP服务器】配置手册

简介: FTP是一个文件传输协议,主要是在互联网上提供文件储存和访问服务的计算机,一个FTP服务器可以对多个客户端提供服务。本文主要介绍在银河麒麟桌面操作系统V10SP1上如何搭建FTP服务器以及在客户端如何访问FTP服务器的操作方法。 正文: 一、操作环境 服务端:银河麒…

C# unknow column “p0.TaskTypeId‘ in ‘field list‘

这个问题就是数据库出现问题&#xff0c;去 日志中去看 &#xff0c;找个具体表去 看实体类&#xff0c;与数据库中的表&#xff0c;是否存在字段。

数字化采购管理革新:全过程数字化采购管理平台的架构与实施

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略&#xff0c;探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架&#xff0c;实现从供应商管理到采购招投…

示例:WPF中推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox

一、目的&#xff1a;推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox 二、效果 实现功能&#xff1a;设置菜单显示位置&#xff0c;最小宽度&#xff0c;最大宽度&#xff0c;位置持久化保存 三、环境 VS2022 Net7 四、使用方式 1、安装nuget包&#xff1a;H…

使用AI机器学习,轻松解决化合物配比优化问题

为什么需要化合物配比的优化&#xff1f; 在化合物制造行业中&#xff0c;化合物的配比是产品质量控制的关键环节。 化合物制造流程 目前&#xff0c;这一过程高度依赖于材料专家和工程技术人员的经验&#xff0c;通过反复试验来验证产品性能&#xff0c;确保其满足市场和客户的…

基于阿里云 OpenAPI 插件,让 Grafana 轻松实现云上数据可视化

作者&#xff1a;徽泠 引言 Grafana 作为市场上领先的开源监控解决方案之一&#xff0c;使得数据监控和可视化变得触手可及。作为一款开源的数据可视化和分析软件&#xff0c;Grafana 支持查询、可视化、提醒和探索您的各种数据&#xff0c;无论它们存储在何处。Grafana 通过…

AIGC笔记--U-ViT的简单代码实现

1--前言 原论文&#xff1a;All are Worth Words: A ViT Backbone for Diffusion Models 完整可debug的代码&#xff1a; 2--结构 3--简单代码 以视频作为输入&#xff0c;实现上图红色框的计算&#xff1a; import torch import torch.nn as nn from einops import rearran…

Linux-笔记 OverlayFS文件系统入门

目录 前言 主要概念 工作原理 特点特性 1、上下合并 2、同名文件覆盖 3、同名目录合并 4、写时拷贝 实操入门 内核配置 挂载文件系统 验证 1、同名文件覆盖 2、同名目录合并 3、写时拷贝 1&#xff09;验证新增文件或目录 2&#xff09;验证修改文件 3&…

昇思25天学习打卡营第3天|张量Tensor

张量Tensor 概念创建张量&#xff08;4种方式&#xff09;张量的属性张量索引张量运算Tensor与NumPy转换 概念 张量&#xff08;Tensor&#xff09;是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。张量是MindSpore网络运算中的基本数据结构。 创建张量&#xff08;4…

MySQL 7种Join的定义图解示范结果(所有join类型)

文章目录 MySQL 7种Join的定义&图解&示范&结果&#xff08;所有join类型&#xff09;基本知识笛卡尔积 建表&填充数据1-Join不带条件account筛选 1-Inner Join 内连接不带条件account相同where筛选玩点特殊的 2-Left Join 左连接不带条件account筛选 3-Right J…

安全技术和防火墙(iptables)

安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督&#xff0c;不主动介入&#xff0c;类似于监控。 入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包&#xff0c;网络监控&#xff0c;服务攻击&#xff0c;木马&#…

HTTP协议中的各种请求头、请求类型的作用以及用途

目录 一、http协议介绍二、http协议的请求头三、http协议的请求类型四、http协议中的各种请求头、请求类型的作用以及用途 一、http协议介绍 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应…

python flask 入门-helloworld

学习视频链接&#xff1a; 01-【前奏】课程介绍_哔哩哔哩_bilibili 1.安装flask pip install flask 踩坑记&#xff1a;本机不要连代理&#xff0c;否则无法install 提示报错valueError: check_hostname requires server_hostname 2.程序编写 在根目录下创建 app.py fr…

React实现二级评论

1. 什么是二级评论 图片来源–blackfrog的掘金文章 口语化的讲当我发布一个评论的时候就是一级评论&#xff0c;当我回复我发布的评论的时候就是二级评论并且将所有回复二级评论的评论也归于二级评论。 2. 二级评论功能的实现逻辑 在这里后端设计了四个接口分别是 获取所有…

jdk1.8升级到jdk11遇到的各种问题

一、第三方依赖使用了BASE64Decoder 如果项目中使用了这个类 sun.misc.BASE64Decoder&#xff0c;就会导致错误&#xff0c;因为再jdk11中&#xff0c;该类已经被删除。 Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 当然这个类也有替换方式&#xf…

第 27 篇 : 搭建maven私服nexus

官网文档 1. 下载应该很慢, 最好是能翻墙 nexus-3.69.0-02-java8-unix.tar.gz 2. 上传到/usr/local/src, 解压及重命名 tar -zxvf nexus-3.69.0-02-java8-unix.tar.gz rm -rf nexus-3.69.0-02-java8-unix.tar.gz mv nexus-3.69.0-02 nexus ls3. 修改配置 cd /usr/local/sr…

作 业 二

cs与msf权限传递 1、进入cs界面,首先来到 Cobalt Strike 目录下&#xff0c;启动 Cobalt Strike 服务端 2、用客户端进 3、建立监听 4、生成脚本文件 5、开启服务&#xff0c;让win_2012 下载木马文件并运行 6、显示已经获取到了win的权限 转到Metasploit Framework 7、进去m…

智慧仓储的秘密武器:数据可视化的应用

智慧仓储中数据可视化是如何应用的&#xff1f;在现代物流和供应链管理中&#xff0c;智慧仓储已成为企业提升效率、降低成本和优化运营的重要手段。而数据可视化作为智慧仓储的重要工具&#xff0c;通过将复杂的数据转化为直观、易理解的图表和图形&#xff0c;极大地提升了仓…

MySQL实训--原神数据库

原神数据库 er图DDL/DML语句查询语句存储过程/触发器 er图 DDL/DML语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS artifacts; CREATE TABLE artifacts (id int NOT NULL AUTO_INCREMENT,artifacts_name varchar(255) CHARACTER SET utf8 COLLATE …

玩机进阶教程----MTK芯片使用Maui META修复基带 改写参数详细教程步骤解析

目前mtk芯片与高通芯片在主流机型 上使用比较普遍。但有时候版本更新或者误檫除分区等等原因会导致手机基带和串码丢失的故障。mtk芯片区别与高通。在早期mtk芯片中可以使用工具SN_Writer_Tool读写参数。但一些新版本机型兼容性不太好。今天使用另外一款工具来演示mtk芯片改写参…