博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么使用模板
阅读量:5152 次
发布时间:2019-06-13

本文共 3039 字,大约阅读时间需要 10 分钟。

C++模板编程是泛型编程的实现方式,由于C++中的类型都是强类型,所以导致每一个变量都有一种对应的类型。这样就会出现一个弊端,就是同样一个算法针对不同类型的参数,就要实现多个版本,这样岂不是很麻烦。那么,C++中是否会有一种办法来帮助我们实现算法通用呢?答案是有的,这就是模板编程,模板编程的目的就是实现代码的高度复用,减少不必要的重复劳动,从而实现泛型编程的目标。

下面,我们通过具体的例子来帮助大家体会模板的好处,这样才会加深大家的印象。

例1 实现一个函数,找出整形数组中的最大值,并返回。

//求出整数数组中的最大值

//参数:

//pInput:数组

//nSize:数组大小

//nMax:返回数组中的最大值,是一个输出参数

//返回值:如果函数执行成功返回1,否则返回0;

#include
#include
int max_int(int * pInput, int nLen, int & nMax){ if(!pInput) { return 0; } nMax = pInput[0]; int i = 0; for(i = 1; i < nLen; i++) { if(nMax < pInput[i]) { nMax=pInput[i]; } } return 1;}int main(){ int Array[5] = { 5, 6, 8, 9, 7 }; int nMax = 0; if(max_int(Array, 5,nMax) == 0) { printf("计算失败!\n"); return 0; } printf("最大值:%d\n", nMax); return 0;} 
例1中的函数功能是查找整个整型数组中的最大值,运行效果如下:
但是,如果我们想要查找到一个浮点型数组的最大值,该如何写呢?
例2 实现一个函数,找出浮点型数组中的最大值,并返回。

//求出浮点数组中的最大值

//参数:

//pInput:数组

//nSize:数组大小

//fMax:返回数组中的最大值,是一个输出参数

//返回值:如果函数执行成功返回1,否则返回0;
#include
#include
int max_float(float * pInput, int nLen, float & fMax){ if(!pInput) { return 0; } fMax = pInput[0]; int i = 0; for (i = 1; i < nLen; i++) { if(fMax
例2中的函数实现了查找一个浮点数组中的最大值,运行效果如下:
现在,让我们来一起反思一下,假如,我们现在要再实现一个函数,来查找整个字符数组中的最大值,那么,我们是不是还要象上面一样继续实现一个函数,代码中的逻辑一样,但是参数类型不一样,如下
int max_char(char * pInput, int nLen, char & cMax){    if(!pInput)    {        return 0;    }    cMax=pInput[0];    int i = 0;    for(i=1; i < nLen; i++)    {        if(cMax
相信有的读者看到这里一定会说“这样也太麻烦了,难道C++中就没有好的方法了吗?”,答案是“有”,那就是模板,就是我们上文中提到的一种泛型编程的实现机制。
下面,就让我们来一起看一下,如果使用模板,该如何实现上面的算法,并且可以同时被整型,浮点型,字符型同时使用,如下:
例3 实现一个函数,找出数组中的最大值,并返回,数组的类型可以是整型,浮点型,字符型。

//求出数组中的最大值

//参数:

//pInput:数组

//nSize:数组大小

//Max:返回数组中的最大值,是一个输出参数

//返回值:如果函数执行成功返回1,否则返回0;
#include
#include
template
int max_array(T * pInput, int nLen, T & max){ if (!pInput) { return 0; } max = pInput[0]; int i = 0; for (i = 1; i < nLen; i++) { if (max < pInput[i]) { max = pInput[i]; } } return 1; }int main(){ int nArray[5] = { 9, 5, 8, 6, 7 }; double fArray[5] = { 5.1, 6.2, 8.6, 9.8, 7.5 }; char cArray[5] = {'a', 'c', 'd', 'e', 'f'}; int nMax = 0; double lfMax = 0.0; char cMax = 0; if (max_array
(nArray, 5, nMax) == 0) { printf("计算失败!\n"); return 0; } else { printf("整数数组中的最大值:%d\n", nMax); } if (max_array
(fArray, 5, lfMax) == 0) { printf("计算失败!\n"); return 0; } else { printf("浮点数组中的最大值:%.2lf\n", lfMax); } if(max_array
(cArray, 5, cMax) == 0) { printf("计算失败!\n"); return 0; } else { printf("字符数组中的最大值:%c\n", cMax); } return 0;} 
例3中定义了一个函数模板,然后分别被3个数组:整型数组,浮点数组,字符数组分别调用,运行效果如下:
今天,我们主要是通过几个小例子,帮助大家体会模板的好处。模板的主要目标就是实现逻辑代码和数据类型相分离,从而实现代码的高度复用。

转载于:https://www.cnblogs.com/niulanshan/p/6174882.html

你可能感兴趣的文章
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
linux一些基本操作-防火墙操作
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
w3m常用快捷键
查看>>
【Unity 3D】学习笔记四十一:关节
查看>>
原型设计工具
查看>>