函数模板实例化问题!

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

主要是题目中的模板函数的具体化部分,实现就报错。不知道错误的原因!

#include<iostream>
#include<cstring>

using namespace std;

template <class T>
T Maxn(T arr[],int len);

template<>int Maxn(char *arr[],int len);

int main()
{
int iarr[]={7,5,6,9,2,1};
double darr[]={3.1,2.6,4.5,3.3};
char *charr[5]={"how are you?","how old are you?","how do you do?","how how how","how much?"};
int imax=Maxn(iarr,6);
double dmax=Maxn(darr,4);
int i=Maxn(charr,5);
cout<<"int最大的是:"<<imax<<endl;
cout<<"double最大的是:"<<dmax<<endl;
cout<<"最长的字符串是:"<<charr[i]<<endl;
return 0;
}
template <class T>
T Maxn(T *arr,int len)
{
T max=arr[0];
for(int i=1;i<len;i++)
{
if(max<arr[i])
{
max=arr[i];
}
}
return max;
}
template<>int Maxn(char *arr[],int len)
{
int max=strlen(arr[0]);
int n=0;
for(int i=1;i<len;i++)
{
if(strlen(arr[i])>max)
{
max=strlen(arr[i]);
n=i;
}
}
return n;
}
...全文
174 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-04-15
  • 打赏
  • 举报
回复
strlen 是用于字符串的,在遇到 '\0'及0x0时停止。
函数需要加个长度的参数。
darkzkar_80 2011-04-15
  • 打赏
  • 举报
回复
template<>char* Maxn(char *arr[],int len);
函数模板声明的问题
template<>int Maxn(char *arr[],int len);
int 和 char* 是不一样的 不能用一个T表示

老兄对于这个字符串数组还是自己重写函数的好 强行用模板反而麻烦了
無_1024 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
strlen(arr[0]),这个函数好像没这么通用吧,如果你传入的是int[],那么strlen能工作吗
[/Quote]

关键在于这个地方不能这么用 strlen会失效的
太乙 2011-04-15
  • 打赏
  • 举报
回复
template <class T>
T Maxn(T arr[],int len);//注意这里的两个T,如果具化的话,需要参数是T,返回类型是T

template<>int Maxn(char *arr[],int len);//这里,参数是char*,返回类型是int,肯定不对!!
bdmh 2011-04-15
  • 打赏
  • 举报
回复
strlen(arr[0]),这个函数好像没这么通用吧,如果你传入的是int[],那么strlen能工作吗

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧