Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 21:08   #1
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию Шаблон. Поиск максимального числа.

Нужно написать функцию-шаблон которая ищет максимальное число в массиве из 5 чисел. Не могу понять в чем ошибка.
Подскажите кто знает

Код:
#include "stdafx.h"
using namespace std;

template <class T>
T max5(T *arr[]);

int _tmain(int argc, _TCHAR* argv[])
{
	int intArr[5] = { 7, 4, 8, 9, 3 };
	int maxInt = max5(intArr);  // error C2784: 'T max5(T *[])' :
                            // could not deduce template argument for 'T1 *[]' from 'int [5]'



	return 0;
}

template <class T>
T max5(T *arr[])
{
	T max = arr[0];

	for (int i = 1; i < 5; i++)
		if (arr[i] > max)
			max = arr[i];

	return max;
}

Последний раз редактировалось viron; 14.12.2011 в 21:10.
viron вне форума Ответить с цитированием
Старый 14.12.2011, 21:22   #2
dasvex
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 39
По умолчанию

template <class T > T max(T a){return a;}
int main()
{
int ans=max<int>(1);
dasvex вне форума Ответить с цитированием
Старый 14.12.2011, 21:35   #3
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Цитата:
template <class T > T max(T a){return a;}
Это функция принимает одно число и его возвращает.
Мне надо чтобы массив был. И максимальное возвращалось
viron вне форума Ответить с цитированием
Старый 14.12.2011, 21:49   #4
dasvex
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 39
По умолчанию

template <class T> T max(T *arr);

int ans=max<int>(arr);
dasvex вне форума Ответить с цитированием
Старый 14.12.2011, 22:04   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

viron

Код:
template <typename T, size_t N>
T maxN(const T (&arr)[N])
{
	T max = arr[0];

	for (size_t i = 1; i < N; i++)
		if (arr[i] > max)
			max = arr[i];

	return max;
}
...

int intArr[] = { 7, 4, 8, 9, 3 };
int maxInt = maxN(intArr);
Rififi вне форума Ответить с цитированием
Старый 14.12.2011, 22:46   #6
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
viron

Код:
template <typename T, size_t N>
T maxN(const T (&arr)[N])
{
	T max = arr[0];

	for (size_t i = 1; i < N; i++)
		if (arr[i] > max)
			max = arr[i];

	return max;
}
...

int intArr[] = { 7, 4, 8, 9, 3 };
int maxInt = maxN(intArr);
Спасибо! Все работает. Правда не совсем понятно как шаблон
определяет какой размер у массива. То есть когда он вызываеться
int maxInt = maxN(intArr); Размер не передаеться а только один массив

Последний раз редактировалось viron; 14.12.2011 в 22:48.
viron вне форума Ответить с цитированием
Старый 14.12.2011, 22:59   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

viron

Правда не совсем понятно как шаблон
определяет какой размер у массива. То есть когда он вызываеться
int maxInt = maxN(intArr);


Размер не передаеться а только один массив

Вот именно. Передается ссылка на массив. А у массива всегда есть размер, и компилятору этот размер известен.

например размер массива также можно было вычислить так:

int arr[] = {...};
size_t N = sizeof(arr) / sizeof(arr[0]);

но использованный способ в maxN проще.
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск максимального числа celovec Общие вопросы Delphi 4 19.03.2011 21:37
найти числа левее максимального aank10 Общие вопросы C/C++ 1 13.02.2011 18:24
С++ поиск максимального числа в...... Bezo Помощь студентам 1 27.01.2011 21:09
C++ поиск максимального числа Donatello Общие вопросы Delphi 2 29.12.2010 02:30
TASM - нахождения максимального числа из трех положительных целых чисел и умножения максимального числа iggor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.05.2009 20:16