Вы передаете фиксированный массив функциям, которые фактически не принимают фиксированный массив в качестве входных данных. Таким образом, ваш массив будет распадаться на указатель на первый элемент, в результате чего функции будут выводить свой параметр шаблона как int*
, и вся информация о фактическом размере массива будет потеряна. Если вы когда-нибудь измените свой массив на другой размер, вам также придется обновить функции. Вы хотите избежать этого.
Попробуйте это вместо этого, что позволит функциям принимать фиксированный массив как есть и будет правильно определять его размер:
#include <iostream>
#include <ctime> // used for rand
template<typename T, size_t N>
void assignRandom(T (&dataValue)[N]); // fills array with random values
template<typename T, size_t N>
void print(T (&dataValue)[N]); // outputs array
template<typename T, size_t N>
T min(T (&dataValue)[N]); // identifies lowest value within array
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
int data0[10];
assignRandom(data0);
cout << "Array of integer: ";
print(data0);
cout << min(data0);
return 0;
}
template<typename T, size_t>
void assignRandom(T (&dataValue)[N])
{
for (int i = 0; i < N; i++)
{
dataValue[i] = rand() % 10 + 1;
}
}
template<typename T, size_t N>
void print(T (&dataValue)[N])
{
for (int i = 0; i < N; i++)
{
cout << dataValue[i] << " ";
}
cout << endl;
}
template<typename T, size_t N>
T min(T (&dataValue)[N])
{
T minimum = dataValue[0];
for (int i = 1; i < N; i++)
{
if (dataValue[i] < minimum)
{
minimum = dataValue[i];
}
}
return minimum;
}
Live Demo