#cpp #массивы #шаблоны_с++
Здравствуйте. Вот задание: То есть выполнить задание 2 варианта используя шаблоны. Я написал такой код. Но он работает только с integer'ом. С флоатом и даблом выдает какую то хрень. Я делал отладку пошагово и понял что ошибка где то в функции void create(T *arr, T n); Но в чем именно вообще не понимаю Если подскажете буду очень благодарен. #include#include using namespace std; template int func(T n); template void create(T *arr, T n); template T positiv(T *arr, int n); template T proizv(T *arr, int n); template void sort(T *arr, int n); template void print(T *arr, int n); int main() { int n; cin >> n; func(n); return 0; } template int func(T n) { T *arr1 = new T[n]; create(arr1, n); /*T *arr2 = new T[n]; create(arr2, n); T *arr3 = new T[n]; create(arr3, n);*/ //T s1 = positiv(arr1, n); //T p1 = proizv(arr1, n); //sort(arr1, n); //T s2 = positiv(arr2, n); //T p2 = proizv(arr2, n); //sort(arr2, n); //T s3 = positiv(arr3, n); //T p3 = proizv(arr3, n); //sort(arr3, n); //cout << s1 << " "; //if (p1 == -100) // cout << "No elements between max and min." << endl; //else // cout << p1 << endl; print(arr1, n); /*cout << s2 << " "; if (p2 == -100) cout << "No elements between max and min." << endl; else cout << p2 << endl; print(arr2, n); cout << s3 << " "; if (p3 == -100) cout << "No elements between max and min." << endl; else cout << p3 << endl; print(arr3, n);*/ system("pause"); return 0; } template void create( T *arr, T n) { for (int i = 0; i < n; i++) { arr[i] = 0; } for (int i = 0; i < n; i++) { cin >> arr[i]; } } template T positiv(T *arr, int n) { T i, summ; for (i = summ = 0; i < n; i++) { if (arr[i] > 0) summ += arr[i]; } return summ; } template T proizv(T *arr, int n) { int i, maxelem, minelem; maxelem = minelem = 0; for (maxelem = minelem = i = 0; i < n; i++) { if (fabs(arr[i]) > fabs(arr[maxelem])) maxelem = i; if (fabs(arr[i]) < fabs(arr[minelem])) minelem = i; } T temp; if (abs(maxelem - minelem) > 1) { int stelem = (maxelem < minelem ? maxelem : minelem); int endelem = (maxelem < minelem ? minelem : maxelem); for (i = stelem + 1, temp = 1; i < endelem; i++) temp *= arr[i]; } else temp = -100; return temp; } template void sort(T *arr, int n) { T temp; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j <= n - 1; j++) if (arr[i] < arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } template void print(T *arr, int n) { for (int i = 0; i < n; i++) cout << arr[i] << " "; delete[] arr; }
Ответы
Ответ 1
Итак, ваш шаблон: templateint func(T n) { T *arr1 = new T[n]; Подставим для double: int func(double n) { double *arr1 = new double[n]; И как вы себе представляете массив из, скажем, 2.5 элементов? n же у вас - double! В create та же некорректность - вы используете n с плавающей точкой... P.S. А вообще, очень странно смотрится чисто C-шный подход с применением шаблонов :)