C++模板——(2)函数模板的声明和使用

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
勤奋,机会,,乐观是成功的三要素!

一起加油!

目录

🔑说明: 

例:编写一个函数模板,求三个数中的最大值。 

🔑说明:

例:编写一个函数模板,对一维数组进行排序。

🔑说明: 

总结:

共勉: 


        将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,称为函数模板。函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来表示。这个通用函数就是函数模板。

        函数模板的一般定义格式如下:

template <class T>或<typename T>
返回类型函数名(参数表)

{

                        函数体

}

🔑说明: 

  • (1)template是定义函数模板的关键字,总是放在模板定义和声明的最前面。
  • (2)<classT>或<typenameT>必须用尖括号“<>”括起来,其中,T为类型参数,T实际上是一个虚拟的类型名,可以用来指定函数模板本身的参数类型、返回值类型,以及局部变量,但是此时并未指定。当使用函数模板时,T 就会被替换为某种实际的数据类型(例如,int、char、float 等 。T还可以被符合规范的标识符替换。
  • (3)后面函数的定义方式与之前提到的普通函数的定义方式类似。 

        下面通过具体的例子说明函数模板的定义和使用方法。

例:编写一个函数模板,求三个数中的最大值。 

#include<iostream>
using namespace std;
template<class T>
T Max(T a,T b,T c)
{T max=a>b?(a>c?a:c):(b>c?b:c);return max;
} 
int main()
{int ia=78,ib=64,ic=18;cout<<"三个整数最大值为:"<<Max(ia,ib,ic)<<endl;float fa=3.14,fb=84.4,fc=15.9;cout<<"三个浮点数最大值为:"<<Max(fa,fb,fc)<<endl;char ca='A',cb='d',cc='m';cout<<"三个字符最大值为:"<<Max(ca,cb,cc)<<endl;return 0;
}

🔑说明:

        该程序定义了一个函数模板T Max(T a,T b,T c),模板参数类型是T,在使用函数模板时,T 被替换为某种实际的数据类型。在调用Max(ia,ib,ic)时,T代表int 类型;在调用Max(fa,fb,fc)时,T代表float 类型;在调用Max(ca,cb,cc)时,T代表char 类型,这样函数模板T Max(T a,T b,T c)通过简单的代码就可以实现不同数据类型的大小比较,提高了代码的复用性,对于其他数据类型,如double、long 等类型同样适用。 

例:编写一个函数模板,对一维数组进行排序。

#include<iostream>
#include<cstring>
using namespace std;
template<class T>
void sort(T*a,int n)
{int i,j;T temp;for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}
}
int main()
{int ia[10]={78,99,45,16,75,94,51,61,75,19};float fa[6]={23.4,78.5,15.9,67.1,94.5,6.1};char str[]="international";sort(ia,10);cout<<"10个整数排序为:";for(int i=0;i<10;i++){cout<<ia[i]<<" "; }cout<<endl;sort(fa,6);cout<<"6个小数排序为:";for(int i=0;i<6;i++){cout<<fa[i]<<" ";} cout<<endl;sort(str,strlen(str));cout<<"字符排序为:";for(int i=0;str[i];i++){cout<<str[i]<<" ";}cout<<endl;return 0;
}

🔑说明: 

        该程序中定义了一个函数模板 void sort(T*a,int n),模板类型参数是T当需要对整数或浮点数或字符型数组进行排序时,T就被替换为相应的int、float、char 类型。

总结:

  •         将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,称为函数模板。 
  •         template是定义函数模板的关键字,总是放在模板定义和声明的最前面。
  •         <classT>或<typenameT>必须用尖括号“<>”括起来,其中,T为类型参数。
  •         后面函数的定义方式与之前提到的普通函数的定义方式类似。

共勉: 

        以上就是我对C++模板——(2)函数模板的声明和使用的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++模板的理解,请持续关注我哦!!! 

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

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

相关文章

Linux文件系统与日志管理

目录 一、Linux文件系统 1、inode 与 block 详解 1.1 inode 和 block 概述 1.2 inode表的内容 1.3 查看文件的inode号码 1.4 模拟innode号耗尽故障处理 2、访问文件的流程 3、文件恢复 3.1 恢复误删除的ext3格式文件 3.2 恢复误删除的 xfs 格式文件 二、Linux日志…

《BackTrader量化交易图解》第8章:plot 绘制金融图

文章目录 8. plot 绘制金融图8.1 金融分析曲线8.2 多曲线金融指标8.3 Observers 观测子模块8.4 plot 绘图函数的常用参数8.5 买卖点符号和色彩风格 8. plot 绘制金融图 8.1 金融分析曲线 BackTrader内置的plot绘图函数&#xff0c; 通过style参数变量控制不同风格的K线图&…

因为热Key和大Key,Redis终于被压崩了

大家好&#xff0c;我是洋子&#xff0c;今天分享一下在做压测时遇到的很有意思的性能问题以及对应的排查解决方案。这个性能问题的现象为&#xff0c;Redis线上实例不可用&#xff0c;Redis读写均超时 性能问题排查过程 先来看一下问题代码&#xff08;Go语言实现&#xff0…

Android 8.1 默认赋予应用权限

Android 8.1 默认赋予应用权限 最近接到项目需求&#xff0c;需要默认授予预置APP的应用权限以便操作使用&#xff0c;具体修改参照如下&#xff1a; /frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java private void grantDefau…

【CMake】1. VSCode 开发环境安装与运行

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 插件 使用 VSCode 开发C项目&#xff0c;安装 CMake 插件 CMakeCMake ToolsCMake Language Support &#xff08;建议&#xff0c;语法提示) 1. 配置 CMake Language Support , Windows 配置 donet 环境 这…

RT-Thread: 基于STM32CubeMX配置驱STM32驱动的USB虚拟串口调试

关键词&#xff1a;USB 虚拟串口 USB虚拟串口&#xff0c;RT-Thread Studio&#xff0c;STM32 说明&#xff1a; 1&#xff1a;文档记录 STM32F103系列基于 RT-Thread 系统的 USB虚拟串口的开启及数据收发应用流程介绍。 2&#xff1a;本文以STM32F103C8T6型号做测试&#x…

【mysql】Mac安装mysql

1.安装mysql brew install mysql提示&#xff1a;We’ve installed your MySQL database without a root password. 2.给root用户设置密码 ##To connect run mysql -u root ##设置密码 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY a12345678*;3.启动…

计算机基础面试题 |16.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

卡码网Java基础课 | 4. A+B问题IV,5. A+B问题VIII

卡码网Java基础课| 4. AB问题IV&#xff0c;5. AB问题VIII 三元运算符4. AB问题IV5. AB问题VIII 三元运算符 普通if int a 10; int b 20; int c; if (a > b) {c a; } else {c b; }而三元运算符的结构如下&#xff1a; 会先求expression的值&#xff0c;如果为 true ,则…

SLB、DMZ、Nginx、Ingress、Gateway、Kibana和Grafana

SLB、DMZ、Nginx、Ingress、Gateway、Kibana和Grafana虽然有一些相似之处&#xff0c;但是它们的功能和适用场景还是有所不同。 SLB主要用于将大流量的请求分配到多个服务器上进行处理&#xff0c;从而提高系统的可伸缩性和可靠性。它适用于需要处理大流量的应用&#xff0c;如…

ANSIC的编译限制有哪些?

ANSIC&#xff08;即C89&#xff0c;也称为ISO/IEC 9899:1989&#xff09;标准中对编译器的限制。 主要体现在以下几个方面 1、函数形参数量上限 ANSIC规定的函数形参数量上限为31个。 2、函数调用时实参数量上限 ANSIC规定的函数调用时实参数量上限也是31个。 3、一条源…

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…

TypeScript 从入门到进阶之基础篇(九) Class类篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

OCP NVME SSD规范解读-5.命令超时限制-2

Sanitize清除的数据很彻底&#xff0c;对FTL映射表、User Data(包括已经写入NAND和仍在cache里的)、Meta Data、安全密匙、CMB中SQ/CQ相关信息、可能含有用户数据的log等等会全部清除。不过&#xff0c;sanitize操作不会改变RPMB、boot分区、不包含用户数据的cache等内容。 RP…

用python实现调用达梦数据库

达梦数据库&#xff08;Dameng Database&#xff09;是一种关系型数据库管理系统&#xff0c;与常见的MySQL、Oracle等数据库系统类似。要使用Python连接并操作达梦数据库&#xff0c;你需要安装达梦数据库的Python驱动程序。 以下是一个使用Python连接达梦数据库的示例代码&a…

总420+,专业120+南京大学851信号与系统电子信息考研经验通信,电子信息

今年考研数学130&#xff0c;专业课120&#xff0c;总分420顺利被南京大学电通录取&#xff0c;梦圆南大&#xff0c;这一年的复习有过迷茫&#xff0c;有过犹豫&#xff0c;最后都坚持过来了&#xff0c;总结一下自己的复习经验&#xff0c;希望对大家有所帮助。数学 5-8月数…

关键字联合体union的定义和使用

联合体的定义 联合体的定义和结构体相同。 联合体成员共用存储空间&#xff0c;联合体占用的空间最大长度的数据成员的长度。 union State {char sleep;char run;int suspend;double error; }state_u;以上例子&#xff0c;State表示联合体的名字&#xff0c;它相当于声明了一…

Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

背景 本文基于 Spark 3.1.1 open-jdk-1.8.0.352目前在排查 Spark 任务的时候&#xff0c;遇到了一个很奇怪的问题&#xff0c;在此记录一下。 现象描述 一个 Spark Application, Driver端的内存为 5GB,一直以来都是能正常调度运行&#xff0c;突然有一天&#xff0c;报…

HarmonyOS应用开发之ArkTS语言学习记录

1、ArkTS介绍 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者…

JDBC-常用API

在上一篇文章里介绍了JDBC的概念、产生原因及简单使用。本篇将介绍JDBC的常用API&#xff0c;包括Connection&#xff0c;Statement, ResultSet, PreparedStatement。 一、Connection Connection是数据库的连接对象。有两个作用&#xff1a;&#xff08;1&#xff09;获取执行…