Напишите шаблонную функцию max5(), которая принимает в качестве аргумента массив из пяти элементов типа T и возвращает наибольший элемент в массиве. (Поскольку размер массива фиксирован, его можно жестко закодировать в цикле, а не передавать в виде аргумента.) Протестируйте функцию в программе с использованием массива из пяти значений int и массива из пяти значений double.
#include <iostream>
#include <cstdlib>
const int arr_size = 5;
using namespace std;
template<typename T>
T max5(T arr[])
{
T maxValue = arr[0];
for(int i=0; i<arr_size; i++)
if(arr[i]>maxValue)
maxValue=arr[i];
return maxValue;
}
int main()
{
int arri=arr_size;
for(int i=0; i<arr_size; i++)
{
cout << "[" << i + 1 << "]" << ": ";
cin >> arri[i];
}
double arrd=arr_size;
for(double i=0; i<arr_size; i++)
{
cout << "[" << i + 1 << "]" << ": ";
cin >> arrd[i];
}
cout << " massiv iArr iz 5 zna4enij tipa INT : ";
cout<< (arri);
cout << " massiv dArr iz 5 zna4enij tipa DOUBLE : ";
cout<< (arrd);
cout<<"Max znachenie massiva int:"<<max5(arri)<<endl;
cout<<"Max znachenie massiva double:"<<max5(arrd)<<endl;
return 0;
}
Не могу решить. Ошибки типа:
cin >> arri[i]; - [Error] invalid types 'int[int]' for array subscript
cin >> arrd[i]; - [Error] invalid types 'double[double]' for array subscript
max5(arri) - [Error] no matching function for call to 'max5(int&)'
max5(arrd) - [Error] no matching function for call to 'max5(double&)'
int arri = arr_size; это не объявление массива. нужно вот так int arri[arr_size];
тоже касается и double
1) Массивы в С++ объявляются так:
int arr[10];
double array[10];
2) Нет смысла использовать в цикле в качестве итератора переменную типа double, уже хотя бы потому что переменная double может содержать дробное число, а индексирование элементов массива происходит целочисленными значениями, начиная с нуля.
Поиск наибольшего элемента массива с использованием указателя на первый элемент массива и отдельной переменной, задающей размер массива:
template <typename T> T max1(const T *arr, const std::size_t size)
{
T maxValue = arr[0];
for (size_t i = 1; i < size; ++i)
if (arr[i] > maxValue)
maxValue = arr[i];
return maxValue;
}
...
const size_t SIZE = 5;
int arr1[SIZE] = {1, 2, 3, 4, 5};
cout << max1(arr1, SIZE) << endl;
С использованием двух указателей — на первый элемент массива, и на элемент, следующий непосредственно за последним:
template <typename T> T max2(const T *first, const T *last)
{
T maxValue = *first;
++first;
for (; first != last; ++first)
if (*first > maxValue)
maxValue = *first;
return maxValue;
}
...
const size_t SIZE = 5;
double arr2[SIZE] = {1, 2, 3, 4, 5};
cout << max2(arr2, arr2 + SIZE) << endl;
С использованием ссылки на массив:
template <typename T, std::size_t size> T max3(const T (&arr)[size])
{
T maxValue = arr[0];
for (size_t i = 1; i < size; ++i)
if (arr[i] > maxValue)
maxValue = arr[i];
return maxValue;
}
...
const size_t SIZE = 5;
double arr3[SIZE] = {1, 2, 3, 4, 5};
cout << max3(arr3) << endl;
С использованием стандартных контейнеров и итераторов:
template <typename T> T max4(T first, T last)
{
if (first == last)
return last;
T maxIt = first;
++first;
for (; first != last; ++first)
if (*first > *maxIt)
maxIt = first;
return maxIt;
}
...
array<int, 5> arr4 = {1, 2, 3, 4, 5};
cout << *max4(arr4.begin(), arr4.end()) << endl;
Ну или можно сразу воспользоваться шаблонной функцией std::max_element():
vector<double> arr5 = {1, 2, 3, 4, 5};
cout << *max_element(arr5.begin(), arr5.end()) << endl;
Примеры использования.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости