C++——模版

news2024/11/15 3:53:18

前言:哈喽小伙伴们好久不见,这是2024年的第一篇博文,我们将继续C++的学习,今天这篇文章,我们来习一下——模版。


目录

一.什么是模版

二.模版分类

1.函数模版

 2.类模板

总结


一.什么是模版

说起模版,我们都很容易想到套模版这个词汇:给你一个固定的格式,然后按照这个格式去完成你的作品之类的

而我们C++中的模版也确实如此,它包括函数模版和类模版两种,它的格式为:

template<typename/class T1,.......>

void fun(T1 .....)

其中template是定义模版的关键字,而typename和class则是定义模版参数的关键字,二者都可以使用,模版的参数可以不止一个T1就代表一个要套用模版的参数类型而T1并不是固定的写法,而是因为类型的英文为type而一般情况下都默认为T

要注意的是定义模版之后,要使用模版的函数要紧挨定义,二者中间不能有任何其他代码


二.模版分类

1.函数模版

我们经常使用swap交换函数这个简单的函数,但是有一个问题是,普通的函数只能定义单一的参数类型,就算可以使用typedef来重定义在改变类型时我们也需要不断的修改,这依然不是很方便。

所以我们引入了函数模版这个概念,使用函数模版定义的函数,无论传入任意类型的参数,都可以实现其功能

下面我们就以swap交换函数为例来介绍模版的具体用法:

#include<iostream>
using namespace std;
template<typename T>
void Swap(T& a, T& b)
{
	T temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 1;
	int b = 2;
	Swap(a, b);
	cout << a << ' ' << b << endl;
	double x = 1.1;
	double y = 2.2;
	Swap(x, y);
	cout << x << ' ' << y << endl;

}

如上,套用模版的函数,其参数类型即为T,随后在使用时,我们只需要将要交换的数据传入,T便会接收并自动转换为该实参的类型,即可完成不同类型的实参共用一个函数的结果:

但是这样的写法,却只能满足相同类型实参直接的交换,如果想要操作不同类型的实参,则需要模版函数也存在同样数量的参数类型数量:

#include<iostream>
using namespace std;

template<typename T1,typename T2>

void Add(T1 a, T2 b)
{
	cout<< a + b <<endl;
}
int main()
{
	int a = 1;
	double b = 2.2;
	Add(a, b);

	return 0;
}

在调用函数模版时,T1便会接受a的类型,T2则接收b的类型,结果如下:

除此之外,一个模版函数还可以与一个同名的非模版函数同时存在,这类似于函数重载

#include<iostream>
using namespace std;

template<typename T1,typename T2>

void Add(T1 a, T2 b)
{
	cout<< a + b <<endl;
}
void Add(int a, int b)
{
	cout << a + b << endl;
}
int main()
{
	int a = 1;
	int c = 2;
	double b = 2.2;
	Add(a, c);
	Add(a, b);

	return 0;
}

当这种情况存在时,Add函数会默认先去调用非模版参数去判断参数类型是否一致,一致则使用该非模版函数,不一致则去调用模版函数。 


 2.类模板

类模版的写法就和函数模版类似了,其作用都是将一些类型不确定或是经常改变的变量的类型用模版去代替。比如我们实现一个顺序表:

template<typename T>
class Qlist
{
public:
	void Pushback(T& a, T n)
	{
		....
	}
private:
	T* _a;
	int _size;
	int _capacity;
};
int main()
{
	Qlist<int> q;
	return 0;
}

我们只需要在创建顺序表时给出数据类型即可。 


总结

模版的内容比较简单,就分享到这里。

喜欢博主文章的小伙伴记得一键三连,我们下期再见!

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

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

相关文章

gofly框架接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用&#xff0c;gofly框架内置校验工具&#xff0c;提供开发效率&#xff0c;开发接口简单调用即可实现验证&#xff0c;下面介绍gofly框架数据验证设计思路及使用方法。 gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单…

SpringBoot系列(一):SpringBoot介绍

SpringBoot系列(一)&#xff1a;SpringBoot介绍 1. SpringBoot介绍 SpringBoot是由Pivotal团队提供的一套用于构建微服务的基础框架&#xff0c;它旨在简化Spring应用程序的创建和开发过程。 SpringBoot通过设计大量的自动化配置等方式来简化Spring原有样板化的配置&#xff…

禁止u盘拷贝的方法,U盘文件防止拷贝的方法

某大型制造企业在研发一款新产品时&#xff0c;涉及到了大量的机密数据和设计图纸。为了方便工作&#xff0c;研发部门的员工经常使用U盘在不同电脑之间传输数据。 然而&#xff0c;由于缺乏对U盘的有效管理&#xff0c;导致了一起严重的数据泄露事件。 事件经过&#xff1a;…

SpringBoot+Redis实现不重复消费的队列

背景 最近我们新研发了一个“年夜饭订购”功能&#xff08;没想到吧&#xff0c;雷袭在是一个程序猿的同时&#xff0c;也是一名优秀的在厨子&#xff09;。用户使用系统选择年夜饭&#xff0c;点击“下单”时&#xff0c;后台首先会生成一条订单数据&#xff0c;返回消息给用户…

了解 SYN Flood 攻击

文章目录&#xff1a; 什么是 SYN Flood 攻击&#xff1f;对网络的影响SYN Flood 发生的迹象如何解决&#xff1f; 什么是 SYN Flood 攻击&#xff1f; SYN Flood&#xff08;SYN 洪水攻击&#xff09;是一种常见的分布式拒绝服务&#xff08;DDoS - Distributed Denial of Se…

Slicer学习笔记(六十五) 3DSlicer的医学图像数据增强扩展模块

1. 医学图像数据增强扩展模块 基于3D Slicer5.1.0 编写了一个测试医学图像的数据增强测试扩展模块。 扩展模块名&#xff1a;DataAugementation 项目地址&#xff1a;DataAugmentation 下载该项目后&#xff0c;可以将该扩展模块添加到3D Slicer的扩展中。 关于如何给3DSlicer…

3.1 序列式容器-vector

STL中一些常见的容器&#xff1a; 序列式容器&#xff08;Sequence Containers&#xff09;&#xff1a; vector&#xff08;动态数组&#xff09;&#xff1a; 动态数组&#xff0c;支持随机访问和在尾部快速插入/删除。list&#xff08;链表&#xff09;&#xff1a; 双向链表…

Unity3d Shader篇(十一)— 遮罩纹理

文章目录 前言一、什么是遮罩纹理&#xff1f;1. 遮罩纹理工作原理2. 遮罩纹理优缺点优点&#xff1a;缺点&#xff1a; 3. 遮罩纹理图 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三、效果四、总结 前言 在…

springboot基于web的音乐网站论文

音乐网站 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分&#xff0c…

C++_运算符_算数运算符

运算符作用 用于执行代码的运算 算数运算符作用 用于处理四则运算 算术运算符包括以下符号 示例 加减乘除 取模运算 前置递增、递减&#xff0c;后置递增、递减

【C初阶】预处理

前言&#xff1a;在本文中&#xff0c;我将系统的整理一下C语言关于预处理部分的语法&#xff0c;便于整理与回归。 1.预定义符号 在C语言中&#xff0c;C标准提供里一些C预定义符号&#xff0c;在预处理期间完成&#xff0c;可以直接使用。 有如下几个符号&#xff1a; 2.#…

AI硬件暴涨的一晚

DELL 31% 引爆AI&#xff0c;都在寻找catch-up plays 软件和云都没咋动&#xff0c;硬件尤其是Semi全在涨。NVDA4%&#xff0c;AMD5%&#xff0c;MRVL8%&#xff0c;西部数据8%&#xff0c;博通7%&#xff08;Oppenheimer、BofA提目标价&#xff09;&#xff0c;台积电4%&…

AI技术大揭秘!你不可不知的顶级大模型

在这个数字化飞速发展的时代&#xff0c;AI大模型以其惊人的应用范围和深远的影响力&#xff0c;正逐渐成为各行各业的革命性力量。想象一下&#xff0c;在一个晴朗的午后&#xff0c;一个智能客服系统正轻松地处理着成千上万的客户咨询&#xff0c;不仅回答速度快捷&#xff0…

【Logback】Logback 的配置文件

目录 一、初始化配置文件 1、logback 配置文件的初始化顺序 2、logback 内部状态信息 二、配置文件的结构 1、logger 元素 2、root 元素 3、appender 元素 三、配置文件中的变量引用 1、如何定义一个变量 2、为变量设置默认值 3、变量的嵌套 In symbols one observe…

Vue开发实例(七)Axios的安装与使用

说明&#xff1a; 如果只是在前端&#xff0c;axios常常需要结合mockjs使用&#xff0c;如果是前后端分离&#xff0c;就需要调用对应的接口&#xff0c;获取参数&#xff0c;传递参数&#xff1b;由于此文章只涉及前端&#xff0c;所以我们需要结合mockjs使用&#xff1b;由于…

基于CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

EasyRecovery16电脑硬盘数据恢复软件功能详解

在数字化时代&#xff0c;人们在日常生活和工作中越来越依赖于电脑和移动设备。不管是个人用户还是企业&#xff0c;数据的重要性都不言而喻。然而&#xff0c;数据丢失和损坏的风险也随之增加&#xff0c;因此&#xff0c;数据恢复软件的需求也日益增长。 EasyRecovery 16是一…

小程序和页面生命周期详解

目录 小程序的生命周期 创建&#xff08;onLoad&#xff09;&#xff1a; 显示&#xff08;onShow&#xff09;&#xff1a; 隐藏&#xff08;onHide&#xff09;&#xff1a; 卸载&#xff08;onUnload&#xff09;&#xff1a; 错误监听&#xff08;onError&#xff09;…

数据分析-Pandas数据的探查面积图

数据分析-Pandas数据的探查面积图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

【深入了解设计模式】组合设计模式

组合设计模式 组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成树状结构来表现“整体-部分”关系。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得代码更加灵活和易于扩展。 概述 ​ 对于这个图片肯定会非常熟悉&#xff0c;上图我们可…