【C/C++】实现模板类数据结构 -- 栈 (亲测可用)

/* *
* 模板类: 栈结构[借助数组实现]
*/
template<typename T>
class Stack {
private:T *data;	/* 数组第一个元素地址,存放T类型数组元素 */int size;	/* 当前栈实际填充数量 */int capacity;	/* 最大装载量 */
public:Stack(int m_capacity) : size(0), capacity(m_capacity) {/* 类构造函数初始化列表进行初始化变量, 降低拷贝赋值次数 */zz_log("Stack constructor");data = new T[capacity];zz_log("Stack capacity: %d, memory size: %u bytes", capacity, capacity * sizeof(T));}void push(T elem) {if (size > capacity - 1) {zz_log("Stack overflow");return;}zz_log("Statck push [%d] elem", size);data[size++] = elem;}T pop() {zz_log("Stack pop [%d] elem", size - 1);return data[--size]; /* 左减减,是由于在push操作后,size进行了自增1, 为下次数据填充做准备。所以要pop时,要先向前移动一位,才是最后一位 */}int empty() {zz_log("Stack current elem count: %d", size);return size;}~Stack() {zz_log("Stack destructor");delete[] data; /* data指针所指向的内存,使用delete[]运算符释放。 */data = NULL;}
};void test_stack() 
{zz_log("test_statck run");Stack<int> s(2);s.push(1);s.push(2);s.push(3);zz_log("pop top elem from stack: [%d]", s.pop());
}int main()
{test_stack();return 0;
}

知识点:

在C++中,可以使用模板类来定义通用的数据结构或算法,以适应不同类型的数据。下面是定义一个模板类的基本语法:

template <typename T>
class ClassName {// 类的成员和方法
};

在上面的代码中,template <typename T> 表示这是一个模板类的声明,T 是一个占位符类型,可以在类中使用。你可以根据需要选择其他的占位符名称,比如使用 class 关键字代替 typename

在模板类的定义中,你可以使用 T 作为类型参数来定义类的成员变量、成员函数和构造函数。例如:

template <typename T>
class Stack {
private:T* data;int size;
public:Stack(int capacity) {data = new T[capacity];size = 0;}void push(T element) {data[size++] = element;}T pop() {return data[--size];}
};

上面的代码定义了一个模板类 Stack,用于表示一个栈数据结构。T 是栈中元素的类型,可以是任意类型。在构造函数、pushpop 方法中,可以使用 T 来声明变量和参数的类型。

使用模板类时,你可以根据需要指定具体的类型参数。例如:

Stack<int> intStack(10);  // 创建一个存储整数的栈
intStack.push(5);
intStack.push(10);
int poppedInt = intStack.pop();Stack<double> doubleStack(10);  // 创建一个存储浮点数的栈
doubleStack.push(3.14);
doubleStack.push(2.718);
double poppedDouble = doubleStack.pop();

上面的代码分别创建了一个存储整数和浮点数的栈,并进行了一些操作。

通过使用模板类,你可以在不同的类型上重用相同的代码,提高代码的复用性和灵活性。

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

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

相关文章

Php“牵手”淘宝商品SKU信息数据采集方法,淘宝API接口申请指南

淘宝天猫商品属性sku信息接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片&#xff0c;销量&#xff0c;sku信息等信息。在电商平台的开发中&#xff0c;商品属性接口API是非常常用的 API&#x…

消息中间件篇

消息中间件篇 RabbitMQ 如何保证消息不丢失 面试官&#xff1a; RabbitMQ如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不…

管理外部表

官方文档地址&#xff1a;Managing Tables 关于外部表 Oracle 数据库允许您对外部表中的数据进行只读访问。外部表定义为不驻留在数据库中的表&#xff0c;通过向数据库提供描述外部表的元数据&#xff0c;数据库能够公开外部表中的数据&#xff0c;就好像它是驻留在常规数据…

Lnton羚通算法算力云平台【PyTorch】教程:torch.nn.Softsign

torch.nn.Softsign 原型 CLASS torch.nn.Softsign() 图 代码 import torch import torch.nn as nnm nn.Softsign() input torch.randn(4) output m(input)print("input: ", input) print("output: ", output)# input: tensor([ 0.0046, -0.4135, -2…

智慧健康杂志智慧健康杂志社智慧健康编辑部2023年第15期目录

智慧医疗 医疗信息化 提高病案首页填写质量&#xff0c;体现病案信息利用价值 张明芳; 1-4 经支气管镜检查联合针吸活检术在肺癌诊断中的临床应用价值 邱洪亮; 5-8 高频超声对距腓前韧带损伤的诊断价值 梁劲松;叶绮婷;曹肖维; 9-12《智慧健康》投稿邮箱&#xff1a…

学习笔记 --- RabbitMQ

简介 RabbitMQ是一款开源的消息队列中间件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准。作为一个消息代理&#xff0c;RabbitMQ可以在应用程序之间可靠地传递和存储消息&#xff0c;并支持多种消息传递模式。 基本概念和特性 消息&#xff1a;在R…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU-Attention多特征分类预测&#xff0c;多特征输入模型&…

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

目录 1、摘要 2、Method 2.1 模拟异常样本 2.2 Memory Module 2.3 空间注意模块 2.4 多尺度特征融合模块 2.5 损失函数设置 2.6 Decoder模块 1、摘要 本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力&#xff0c;从而更好地区分非正常图像。如…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中&#xff0c;通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分&#xff1a;序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等&#xff0c;目前主流的远程调用技术有基于HTTP…

【运筹优化】贪心启发式算法和蜘蛛猴优化算法求解连续选址问题 + Java代码实现

文章目录 一、问题描述二、思路分析三、解决方案3.1 贪心启发式算法3.2 群体智能算法&#xff08;蜘蛛猴优化算法&#xff09; 四、总结 一、问题描述 选址问题是指在规划区域里选择一个或多个设施的位置&#xff0c;使得目标最优。 按照规划区域的结构划分&#xff0c;可以将…

spring异步框架使用教程

背景 在需求开发过程中&#xff0c;为了提升效率&#xff0c;很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作&#xff0c;这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…

系统架构设计师-信息安全技术(2)

目录 一、安全架构概述 1、信息安全所面临的威胁 二、安全模型 1、安全模型的分类 2、BLP模型 3、Biba 模型 4、Chinese Wall模型 三、信息安全整体架构设计 1、WPDRRC模型 2、各模型的安全防范功能 四、网络安全体系架构设计 1、开放系统互联安全体系结构 2、安全服务与安…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么&#xff1f;为什么选Flutter&#xff1f; 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览&#xff1a; 4.UI 构建与布局什么是Widget&#xff1a;StatelessWidget和StatefulWidget&#xff1a;Widget的组合&#x…

Java开发面试题 | 2023

Java基础 接口和抽象类的区别&#xff1f;Java动态代理HashMap 底层实现及put元素的具体过程currenthashmap底层实现原理&#xff1f;map可以放null值吗&#xff0c;currenthashmap为什么不能放null值synchronze和reetrantlock区别&#xff1f;怎样停止一个运行中的线程&#…

List转Map

一、list转map Map<Long, User> maps userList.stream().collect(Collectors.toMap(User::getId,Function.identity())); 看来还是使用JDK 1.8方便一些。 二、另外&#xff0c;转换成map的时候&#xff0c;可能出现key一样的情况&#xff0c;如果不指定一个覆盖规则&…

Redis学习笔记

redis相关内容 默认端口6379 默认16个数据库&#xff0c;初始默认使用0号库 使用select 切换数据库 统一密码管理&#xff0c;所有库密码相同 dbsize&#xff1a;查看当前库key的数量 flushdb&#xff1a;清空当前库 flushall&#xff1a;清空全部库 redis是单线程 多路…

机器学习笔记 - 使用 AugMix 增强图像分类模型的鲁棒性

一、简述 图像分类模型能够预测与训练数据具有相同分布的数据。然而,在现实场景中,输入数据可能会发生变化。例如,当使用不同的相机进行推理时,照明条件、对比度、颜色失真等可能与训练集不同,并显着影响模型的性能。为了应对这一挑战,Hendrycks 等人提出了 AugMix 算法。…

IP地址SSL证书

在许多企业用例中&#xff0c;公司需要SSL证书作为IP地址。公司使用IP地址通过Internet或Intranet访问各种类型的应用程序。根据组织策略&#xff0c;您希望使用SSL证书保护IP地址。 在本文中&#xff0c;我将向您解释获取IP地址SSL证书的过程&#xff0c;以及哪种类型的SSL证…

实验二 Hdoop2.7.6+JDK1.8+SSH的安装部署与基本操作

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Web和云开发,Rust会起飞?

Web和云开发&#xff0c;Rust会起飞&#xff1f; 一、前言 二、大厂偏爱&#xff0c;Rust的未来 三、Rust做Web的雄心 四、有必要换Rust做Web&#xff1f; 1.效率和性能 2.可靠性和可维护性 五、Rust先苦后甜 六、用Rust前的几个问题 七、开发界的强者 一、前言 去年…