C++模板-泛型函数与泛型类

2023-10-30

泛型,在调用函数或使用该类时才指定特定的类型,可以避免重复写类似功能代码。那C++语言如何定义泛型呢?

/*
* Author:W;
* 泛型-模板:只有在调用或使用该函数或类时,才确定类型
* 1.泛型函数
* 2.泛型类
*/

//引入标准输入输出流
#include <iostream>
using namespace std;
#include <vector>

/*泛型函数*/
template <typename T>
 T Max(T a, T b)
{
	 return (a > b) ? a : b;
}


/*泛型类*/
 template <class T>
 class Stack
 {
 public:
	 void push(T e);//入栈
	 void pop();//出栈
	 T top();//返回栈顶元素
	 bool isEmpty();//判断是否为空
 private:
	 vector<T> elements;
 };

 //检查栈中是否还有元素
 template <class T>
 bool Stack<T>::isEmpty()
 {
	 return elements.empty();
 }

 //元素入栈
 template <class T>
 void Stack<T>::push(T e)
 {
	 elements.push_back(e);
 }
 
 //元素出栈
 template <class T>
 void Stack<T>::pop()
 {
	 if (!elements.empty())
	 {
		 elements.pop_back();
	 }
 }

 //返回栈顶元素
 template <class T>
 T Stack<T>::top()
 {
	 if (!elements.empty())
	 {
		 return elements.back();
	 }

	 return NULL;
 }

//main程序执行入口函数
int main()
{
	cout << "====泛型函数====" << endl;
	cout << Max(2, 5) << endl;//整数比较
	cout << Max(3.5f, 2.1f) << endl;//浮点数比较
	cout << Max("BaiDu", "YaHu") << endl;//字符串比较


	cout << "====泛型类====" << endl;
	Stack<int> intStack;
	intStack.push(3);
	cout << "取出intStack当前栈顶元素 =" << intStack.top() << endl;

	Stack<string> strStack;
	strStack.push("W");
	strStack.push("L");
	strStack.push("Q");
	strStack.pop();
	cout << "取出strStack当前栈顶元素 = " << strStack.top() << endl;

}



运行结果如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++模板-泛型函数与泛型类 的相关文章

  • 不能使用函数名称距离

    以下代码可以正常编译 include
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

    我正在用 C 编写一个计算器 textBoxResult是一个文本框 我在其中显示数字 recount是以度为单位获取角度并以弧度为单位返回的函数 我的角度是从texBoxInput public double recount int nu
  • 二维数组的列求和

    我有一个IEnumerable
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许

随机推荐

  • 浅拷贝与深拷贝例题与思考

    title 浅拷贝与深拷贝 author hou wei date 2023 04 17 output html document knitr opts chunk set echo TRUE 问答题 0 请问你是如何理解 在 Python
  • sqlserver 批量快速插入数据

    先转换成DataTable 然后插入数据 1 使用最后再看看使用表值参数的效率 效率最高 首先先创建 表值特性类型的表 此表应该与转换后的datatable的列相同不然会出错 查看地方在 当前数据库下的 可编程性 类型 用户定义表类型 CR
  • 【分享】ST7920的LCD12864 Proteus仿真模型

    分享 ST7920的LCD12864 Proteus仿真模型 目前最新版本的是1 03 GitHub地址 https github com cdhigh lcd12864 st7920 proteus Proteus添加动态链接库文件 dl
  • 网站部署详细流程(包括域名,服务器的配置等)

    有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上 让别人观摩观摩 可无奈技术有限 对于网站部署流程有些迷茫 在这里 我会告诉大家 如何将自己做出来的网站放到网上 首先 我们需要明白几个概念 备案 解析 然后 我们还要知道 应
  • 上传formData文件

    if config method get config file const data config data const formData new FormData Object keys data forEach key gt if A
  • QT的tableWidget数据存储到Excle

    目录 环境介绍 所需要的头文件 测试效果 TableWidget表格的内容 Excel表格内容 lt
  • Grub2启动项启动顺序修改

    关键点即 修改grub cfg 终端命令 sudo i 获取权限 chmod w boot grub grub cfg 给文件添加写入权限 gedit boot grub grub cfg 编辑文件内容 BEGIN etc grub d 3
  • 渗透测试-地基钓鱼篇-Cobalt Strike钓鱼(二十五)

    渗透测试 地基钓鱼篇 Cobalt Strike钓鱼 二十五 作者 大余 时间 2020 12 17 简介 渗透测试 地基篇 该篇章目的是重新牢固地基 加强每日训练操作的笔记 在记录地基笔记中会有很多跳跃性思维的操作和方式方法 望大家能共同
  • MTCNN实现流程

    MTCNN实现流程 文章 https arxiv org pdf 1604 02878 pdf code 1 mxnet上的实现 https github com Seanlinx mtcnn 2 tensorflow上的实现 https
  • linux 安装python3(亲测可用)

    首先安装python3所需的基础库 yum y install openssl devel bzip2 devel expat devel gdbm devel yum y install readline devel zlib devel
  • uniapp uni.requet()二次封装ts版

    uni app网络请求 uni app题拱了uni requet 方法 发起网络请求 uni request url https wwww xxxx cn api home list 仅为示例 并非真实接口地址 data text uni
  • 96-97-----JS基础-----DOM查询(二、三)

    一 代码 不难 用到时看一下DOM查询的相关方法即可
  • [零基础学C#] C#从小白到菜鸟 第5期 - 判断

    前言 上一期我们学习了常量和运算符 这一期我们就要开始学习语句块了 简单啊 本来这一期想讲判断和循环的 但是一起讲的话太多了 所以本期就只讲判断吧 学习编程一定要多学多练 多敲出来才能记得更牢 同样 本期的资源下载在底部 大家在学习过程中有
  • 解决Linux,Ubuntu下使用python包管理工具pip命令安装和下载包速度很慢、失败或者connection timeout等问题

    pip 是 Python 包管理工具 该工具提供了对Python 包的查找 下载 安装 卸载的功能 1 原因 pip命令在Linux系统下使用频率非常高 但是国内使用时常常会下载很慢 或者经常提醒连接超时 其主要问题就是它的默认服务器在国外
  • Beyond Compare 4 密钥解决办法

    修改注册表 1 在搜索栏中输入 regedit 打开注册表 2 Ctrl F搜索CacheId 3 删除项目CacheId 路径 HKEY CURRENT USER Software Scooter Software Beyond Comp
  • HCIP笔记

    HCIA复习 抽象语言 编码编码 二进制 二进制 电信号处理电信号 OSI参考模型 OSI RM 应用层 表示层 会话层 传输层 端口号 0 65535 1 1023是注明端口网络层 IP地址 数据链路层 物理层 ARP协议 正向ARP 通
  • 手把手教你写垃圾分类系统

    垃圾分类是目前社会的一个热点 制作垃圾分类只要找到合适的数据集 垃圾分类的模型构建并不难 这里收集了一份关于垃圾分类的数据集 一共有四个大类和245个小类 大类分别是厨余垃圾 可回收物 其他垃圾和有害垃圾 小类主要是垃圾的具体类别 果皮 纸
  • 2021-10-24

    2021 10 24
  • Linux系统常用命令

    文章目录 一 Linux目录介绍 二 Linux命令 三 Linux常用系统工作命令 1 输出字符串或者环境变量取值后的值 echo 2 显示或者设置系统时间与日期 date 3 设置系统时间 timedatectl 4 系统重启 rebo
  • C++模板-泛型函数与泛型类

    泛型 在调用函数或使用该类时才指定特定的类型 可以避免重复写类似功能代码 那C 语言如何定义泛型呢 Author W 泛型 模板 只有在调用或使用该函数或类时 才确定类型 1 泛型函数 2 泛型类 引入标准输入输出流 include