模板template基础学习

模板template

模板的概念

1.所谓模板是一种使用无类型参数来产生一系列函数或 类的机制。
2.若一个程序的功能是对某种特定的数据类型进行处 理,则可以将所处理的数据类型说明为参数,以便在 其他数据类型的情况下使用,这就是模板的由来。
3.模板是以一种完全通用的方法来设计函数或类而不必 预先说明将被使用的每个对象的类型。
4.通过模板可以产生类或函数的集合,使它们操作不同 的数据类型,从而避免需要为每一种数据类型产生一 个单独的类或函数
求大值模板函数实现
例:
1.求两个数大值,使用模板
template < class T >
T max(Ta , T b)
{
return ( a > b ) ? a : b;
}
2.template < 模板形参表> <返回值类型>
<函数名>(模板函数形参表)
{ //函数定义体 }

#include<iostream>
using namespace std;
template <class T>     
T min(T a,T b)
{
	return (a>b) ? a:b;
}
int main(int argc, char* argv[])
{

	cout<<min(1,2)<<" "<<min('a','b')<<" "<<min(5.3,2.2)<<endl;
	return 0;

在这里插入图片描述

#include <iostream>
using namespace std;
template <class T>
T min(T a[],int n)
{
	int i;
	T minv=a[0];
	for( i = 1;i < n ; i++){
		if(minv>a[i])
		minv=a[i];
	}
	return minv;
}


int main(int argc, char *argv[])
{
    int a[]={1,3,0,2,7,6,4,5,2};
    double b[]={1.2,-3.4,6.8,9,8};
    cout<<"a数组的最小值为:"<<min(a,9)<<endl;
    cout<<"b数组的最小值为:"<<min(b,4)<<endl;   
    system("PAUSE");	
    return 0;
}

在这里插入图片描述

模板工作方式

函数模板只是说明,不能直接执行,需要实例化 为模板函数后才能执行;
在说明了一个函数模板后,当编译系统发现有一 个对应的函数调用时,将根据实参中的类型来确 认是否匹配函数模板中对应的形参,然后生成一 个重载函数。该重载函数的定义体与函数模板的 函数定义体相同,它称之为模板函数

模板的优缺点

函数模板方法克服了C语言解决上述问题时用大 量不同函数名表示相似功能的坏习惯;克服了宏定义不能进行参数类型检查的弊端;克服了C++函数重载用相同函数名字重写几个函 数的繁琐。
缺点,调试比较困难。 一般先写一个特殊版本的函数; 运行正确后,改成模板函数

猜你喜欢

转载自blog.csdn.net/qq_41767945/article/details/90271380