Не могу понять в чем проблема:

203
22 февраля 2018, 14:33

Напишите шаблонную функцию 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&)'

Answer 1

int arri = arr_size; это не объявление массива. нужно вот так int arri[arr_size];

тоже касается и double

Answer 2

1) Массивы в С++ объявляются так:

int arr[10];
double array[10];

2) Нет смысла использовать в цикле в качестве итератора переменную типа double, уже хотя бы потому что переменная double может содержать дробное число, а индексирование элементов массива происходит целочисленными значениями, начиная с нуля.

Answer 3

Поиск наибольшего элемента массива с использованием указателя на первый элемент массива и отдельной переменной, задающей размер массива:

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;

Примеры использования.

READ ALSO
WebApplication &amp; Google

WebApplication & Google

Подскажите, пожалуйста, какие файлы и заголовки должна уметь отдавать WebApplication, "смотрящая" в интернет по 80-му порту так, чтобы роботы поисковиков,...

219
Что такое cin &gt;&gt; в C++?

Что такое cin >> в C++?

Что такое cin >> в C++? Как он работает? Когда его следует использовать?

247
Голосовой отпечаток

Голосовой отпечаток

Добрый день! Хотелось бы в своем приложении реализовать распознавание пользователя через его голосовой отпечатокЕсли какие нибудь библиотеки...

250
Сколько всего способов создать объект в java?

Сколько всего способов создать объект в java?

Сколько всего существует способов создать объект в java ? Я знаю два, с new и без негоЕсть ли еще способы?

224