C++ 函数模板问题(帮助修改)

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:59:02
编译环境:VC++2005

问题要求:编写模板函数 maxn(),它将由一个T类型元素组成的数组和一个表示数组元素数目的整数作为参数,并返回数组中最大的元素。在程序对它进行测试,该程序使用一个包含6个int元素的数组和一个包含3个double元素的数组来调用该函数。程序还包含一个具体化,它将char指针数组和数组中的指针数量作为参数,并返回最长的字符串的地址。如果有多个这样的字符串,则返回其中第一个字符串的地址。使用由5个字符串指针组成的数组来测试该具体化。

#include<iostream>
#include<cstring>

template<typename T>
T maxn(const T arr[],const int n);

template<> (char*) maxn<char*>((char**) pt,const int n);

int main()
{
using namespace std;
int arr1[6]={7,9,8,11,15,4};
int max_arr1=maxn(arr1,6);

double arr2[4]={15.8,19.7,20.1,5.8};
double max_arr2=maxn(arr2,4);

char* pt[5]={"wow haha","think it over","see it againA","kaka ri","zen me"};
char* max_addr=maxn(pt,5);

cout<<"arr1(max): "<<max_arr1<<endl
<<"arr2(max): "<<max_arr2<<endl
&

你用typedef重新定义一个名称就清晰多了。

#include<iostream>
#include<cstring>

template<typename T>
T maxn(const T arr[],const int n);

//把char *重新取个名字tstr
typedef char * tstr;
template<> tstr maxn< tstr >(const tstr arr[],const int n);

int main()
{
using namespace std;
    int arr1[6]={7,9,8,11,15,4};
    int max_arr1=maxn(arr1,6);

    double arr2[4]={15.8,19.7,20.1,5.8};
    double max_arr2=maxn(arr2,4);

    char* pt[5]={"wow haha","think it over","see it againA","kaka ri","zen me"};
    char* max_addr=maxn(pt,5);

    cout<<"arr1(max): "<<max_arr1<<endl
    <<"arr2(max): "<