模板的作用是解决不同类型,处理代码的重复编写,比如适用 int 类型编写了一个冒泡排序,那么这个方法只能对 Int 类型进行排序,如果想要对 char 、double 等类型同样进行冒泡排序呢,没有模板就需要重复编写多次。而使用模板则只需要替换类型即可。
#include<stdio.h>
#include<malloc.h>
template<class T>
void Sort(T arr,int nlength)
{
int i,j;
for(j=0; j<nlength-1;j++)
{
for(i=0; i< nlength-1-j;i++)
{
if(*(arr+i) > *(arr+i+1))
{
int temp;
temp = *(arr+i);
*(arr+i) = *(arr+i+1);
*(arr+i+1) = temp;
}
}
}
}
int main(int argc,char* argv[])
{
int arr[] = {14,15,7,2,4,78};
int i,n;
n = sizeof(arr)/sizeof(int);
Sort(arr,n);
char arr1[] = {14,15,7,2,4,78};
Sort(arr1,n);
double arr2[] = {14,15,7,2,4,78};
Sort(arr2,n);
return 0;
}
如果两个及其以上的变量需要替换,例如折半查找函数,传入的数组类型是 int ,那么它要找的元素类型肯定也是 Int ,如果是数组类型是 char ,那它的元素类型肯定也是char,此时,就需要替换两个。
template<class T,class E>
//单一种情况
//int Find_One(int *p, int n , int one)
//通用情况
//int Find_One( T p, int n , E one)
{
int start = 0,end = n-1,index;
while(start < end)
{
index = (start+end)/2;
if(one > *(p+index))
start = index+1;
else if(one < *(p+index))
end = index-1;
else
return index;
}
}
之前是在函数中使用模板,那在类中怎么使用?和函数使用方法一模一样。
template<class T, class M>
class Base
{
T x;
T y;
M a;
M b;
T Max()
{
if(x > y)
return x;
else
return y;
}
M Min()
{
if(a < b)
return a;
else
return b;
}
};