понедельник, 25 августа 2008 г.

глава 8 упражнение 6


Сделайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое число, представляющее собой количество элементов в массиве, и которая возвращает элемент с наибольшим значением в этом массиве.
Проверьте ее в программе, которая использует шаблон данной функции с массивом из шести значений типа int и с массивом из четырех значений типа double.
Программа также должна включать специализацию, которая использует в качестве аргумента массив указателей на char и число указателей в качестве второго аргумента и которая возвращает адрес самой длинной строки. Если имеется более одной строки наибольшей длины, функция возвращает адрес первой из них. Выполнить проверку специализации на примере массива, состоящего из пяти указателей на строки.



#include <iostream.h>
#include <stdlib.h>
#include <cstring>

const int it = 5;
template <typename T> T maxn (T Arr[], int k);
template <> int maxn (char * , int );
int main()
{

int iArr [6] = {11, 12, 43, 24, 55, 45};
double dArr [4] = {32.4, 12.5, 34.7, 124.67};
char * chArr [it] =
{
"mellelele",
"Niggggaaaa1",
"6bIgJIgEP",
"Niggggaaaa2",
"g-koder"
};
cout << " massiv iArr iz 6 zna4enij tipa INT : " << endl;
cout << " massiv dArr iz 4 zna4enij tipa DOUBLE : " << endl;
cout << " massiv chArr iz 5 zna4enij tipa CHAR* : " << endl;
cout << "naibolshij element iz massiva iArr : " << maxn(iArr, 6) << endl;
cout << "naibolshij element iz massiva dArr : " << maxn(dArr, 4) << endl;
cout << "naibolshij element iz massiva chArr : " << maxn(chArr, it) << endl;

system("PAUSE");
return 0;
}
template <typename T> T maxn (T Arr[], int k)
{
T temp = 0;
for (int i = 0; i<k; i++)
if (temp < Arr[i])
temp = Arr[i];
return temp;
}
template <>int maxn (char * ukChar[], int k)
{
int temp =0;
int tmp = 0;
for (int i = 0; i<k; i++)
{
if (tmp < strlen(ukChar[i]))
{
tmp = strlen(ukChar[i]);
temp = &ukChar[i];
}
cout << ukChar[i] << endl;

};
return temp;
}

Комментариев нет: