C++提供函数模板,提供一个函数实现不同的数据类型比较的方法,使得在比较不同类型的数据类型时,不用像c语言那样int类型写一个函数,long int类型写一个函数......会发现这些函数的功能都一样,只是数据类型不一样,这样在我们写代码的时候会觉得很无聊,并且是重复造轮子,没有什么意义,如果用全局查找来替换的话,如果变量名字中含有int之类的则会发生一些错误。于是乎在c++里面提供了函数模板的概念。
先看一下类型
template <typename T>
T Swap(T a[],T b[],int n);
template <typename T>
T Swap(T a[],T b[],int n)
{
T t;
for (int i=0; i<n; i++)
{
t=a[i];
a[i]=b[i];
b[i]=t;
}
}
上述代码就是一个简单的利用函数模板来实现两数组的元素互相交换的代码。
首先
使用函数模板需要加上c++关键字template
格式为template <typename/class T>这里T表示数据类型可以用任意非关键字代替。
然后是函数声明,与其他函数不一样的是这里的数据类型要用T来代替。
格式为T + (函数名)+(形参a, 形参b)//有更多形参可以继续加
然后就可以像其他函数一样写函数的实现了。
如果要将声明和实现分开的话,在声明的地方需要加上
template <typename /class T>
T + 函数名(形参a,形参b)
实现的地方也要加上template <typename /class T>
以表明这是一个模板函数。然后就可以使用了
以上述模板函数的源代码为例,功能是实现两个数组的元素的互换。
#include <iostream>
using namespace std;
template <typename T>
T Swap(T a[],T b[],int n);
int main()
{
int a[3]= {1,2,3},b[3]= {4,5,6};
int i,n=3;
for(i=0; i<n-1; i++)
cout<<"a["<<i<<"]="<<a[i]<<" ";
cout<<"a["<<i<<"]="<<a[i]<<" \n";
for(i=0; i<n-1; i++)
cout<<"b["<<i<<"]="<<b[i]<<" ";
cout<<"b["<<i<<"]="<<b[i]<<" \n";
Swap(a,b,n);
for(i=0; i<n-1; i++)
cout<<"a["<<i<<"]="<<a[i]<<" ";
cout<<"a["<<i<<"]="<<a[i]<<" \n";
for(i=0; i<n-1; i++)
cout<<"b["<<i<<"]="<<b[i]<<" ";
cout<<"b["<<i<<"]="<<b[i]<<" \n";
}
template <typename T>
T Swap(T a[],T b[],int n)
{
T t;
for (int i=0; i<n; i++)
{
t=a[i];
a[i]=b[i];
b[i]=t;
}
}