以下的程序利用模板实现了从一维数组中找出最大值和最小值,支持int,float,double,char,char*的数据类型,其中char*数据类型的实现用于处理字符串,需要利用模板具体化实现,可是在实现的过程中,发现不能用const修饰模板函数参数,具体如下,不知道我描述清楚了吗?请高手解答~谢谢
#include<iostream>
#include<string>using namespace std;
template <class T>
void MaxMin( T Array[],int length,T &max,T &min)//即使是字符串也没问题,因为他们比较的是ASCⅡ码
//void MaxMin(const T Array[],int length,T &max,T &min),问题就出在这里,如果在这里和具体化过程中都有const存在的话,那么下面的具体化编译不能成功,有人可以
//解释一下为什么吗?先谢过了
{if (length<=0){cout<<"错误输入!"<<endl;
return;
}
max=Array[0];
min=Array[0];
for(int i=1;i<length;i++)
{max=(max>Array[i]?max:Array[i]);
min=(min<Array[i]?min:Array[i]);
}
cout<<"数组最大值为:"<<max<<endl;
cout<<"数组最小值为:"<<min<<endl;
}
//对于指针数组实例化
template <>
void MaxMin( char* Array[],int length,char* &max,char* &min)//即使是字符串也没问题,因为他们比较的是ASCⅡ
{ if (length<=0)
{cout<<"错误输入!"<<endl;
return;
}
max=Array[0];
min=Array[0];
for(int i=1;i<length;i++)
{int l1=strcmp(max,Array[i]);
int l2=strcmp(min,Array[i]);
max=(l1==1?max:Array[i]);
min=(l2==-1?min:Array[i]);
}
cout<<"数组最大值为:"<<max<<endl;
cout<<"数组最小值为:"<<min<<endl;
}
void main()
{ int Array_Int[]={4,8,8,7,3,};
int L_Int=sizeof(Array_Int)/sizeof(Array_Int[0]);
int Max_Int,Min_Int;
MaxMin(Array_Int,L_Int,Max_Int,Min_Int); //float and double are the same!
char Array_Char[]={"Come on!"};//compare ASCⅡ
int L_Char=sizeof(Array_Char)/sizeof(Array_Char[0])-1;
char Max_Char,Min_Char;
MaxMin(Array_Char,L_Char,Max_Char,Min_Char);
/
char*Max_String;//
char*Min_String;
char *Array_String[]={"please","come","on","!!"};
int L_String=sizeof(Array_String)/sizeof(Array_String[0]);
MaxMin(Array_String,L_String,Max_String,Min_String);
}