首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请大家帮忙写一个小程序,小弟我写了好长时间没写出来,多谢啦

2013-02-27 
请大家帮忙写一个小程序,我写了好长时间没写出来,谢谢啦编写模板函数maxn(),它将由一个T类型元素组成的数

请大家帮忙写一个小程序,我写了好长时间没写出来,谢谢啦
编写模板函数maxn(),它将由一个T类型元素组成的数组和一个表示数组元素数目的整数作为参数,并返回数组中最大的元素。在程序对它进行测试,该程序使用一个包含6个int元素的数组和一个包含4个double元素的数组来调用该函数。程序还包含一个具体化,它将char指针数组和数组中的指针数量作为参数,并返回最长的字符串的地址。如果有多个这样的字符串,则返回其中第一个字符串的地址。使用由5个字符串指针组成的数组来测试该具体化。


这是c++ primer plus后面的一个练习题,么有写出来,谢谢前辈们指点啊,有源码更好啦
[解决办法]

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


参考:

#include <iostream>
using namespace std;

template <typename T>
T maxn(T* t, int length)
{
T max_value = *t;
for(int i = 1; i < length; ++i)
{
if(*(t + i) > max_value)
{
max_value = *(t + i);
}
}

return max_value;
}

int main(int argc, char** argv)
{
int a[] = {11, 12, 3, 4, 15, 6, 7, 10, 1};
cout << "max integer is: " << maxn<int>(a, sizeof(a) / sizeof(a[0])) << endl;

double b[] = {11.1, 12.12, 3.3, 4.4, 15.15, 6.6, 7.7, 10.1, 1.1};
cout << "max double is: " << maxn<double>(b, sizeof(b) / sizeof(b[0])) << endl;

return 0;
}


你甚至可以自己定义一个类,只要在类中重载了<,并且有拷贝构造函数,拷贝赋值操作符这些东西的话,你可以用maxn去获得该类对象数组中,最大的那个。
[解决办法]
#include <iostream>
#include <cstring>
#include <cstdlib>

class String_Trait
{
public:
static int lt(const char *a, const char *b) {return strlen(a)<strlen(b);}
};

template<class T> class General_Trait
{
public:
static int lt(T a, T b) {return a<b;}
};

template<class T, class Trait> 
T maxn(T arry[], int n)
{
T max = arry[0];

for (int i = 1; i < n; i++)
{
if (Trait::lt(max, arry[i]))
{
max = arry[i];
}
}

return max;
}

int main()
{
int iArry[] = {5, 2, 6, 9, 1, 10, 4};
int iMax = maxn<int, General_Trait<int>>(iArry, 7);
std::cout << iMax << std::endl;

double dArry[] = {0.4, 0.2, 0.7, 0.3, 0.65, 1.8, 1.97};
double dMax = maxn<double, General_Trait<double>>(dArry, 7);
std::cout << dMax << std::endl;

char *pszArry[] = {"Hello World!"
, "HelloWorld!"
, "Hello World 2012"};
char *pszMax = maxn<char *, String_Trait>(pszArry, 3);
std::cout << pszMax << std::endl;

system("pause");
return 0;
}

热点排行