Как превратить функцию sumvec в функцию шаблона

У меня есть этот код (я знаю, что он на испанский, я могу перевести, если нужно), где мне дали функцию SumVec. Функция получает в качестве параметров два массива (целочисленные указатели) и целое число (размер) и возвращает указатель на сумму двух векторов или массивов. Мне нужно преобразовать его, чтобы он мог принимать любой тип, а не только целое число. Я знаю, что вы делаете это с шаблоном, используя «шаблон», но я делал только простые классы, я не знаю, как это сделать с помощью указателей. Любая помощь?

Код

#include <iostream>
#include <cstdlib>
using namespace std;
int * sumVec(int*, int*, int);
int main() {
int n, nCol, nFil = 0;
//Arreglo unidimensional din�mico
int *ptr, *suma, size;
cout << "Cuantos Items va a procesar:";
cin >> size;
ptr = new int[size];//Asignando memoria al arreglo
//input
for (int i = 0;i<size;i++) {
cout << "Ingrese el numero de Items NO." << i + 1 << " :";
cin >> ptr[i];
}
//Mostrando el contenido del archivo
for (int i = 0;i<size;i++) cout << "\nItem. NO." << i + 1 << " :" << ptr[i];
cout << endl;

suma = sumVec(ptr, ptr, size);

//Mostrando el contenido de la suma
for (int i = 0;i<size;i++) cout << "\nSuma Item. NO." << i + 1 << " :" << suma[i];
cout << endl;

delete[]ptr;//Liberando la memoria asignada al arreglo unidimensional.

return 0;
}
int * sumVec(int* Array1, int* Array2, int Size){
  int *ptr = new int[Size];
  for(int i=0; i<Size; i++)
    ptr[i]= Array1[i] + Array2[i];

  return ptr;
}

зачем вам изобретать велосипед? Просто используйте std::vector и std::transform

463035818_is_not_a_number 10.08.2018 17:04

Потому что они хотят, чтобы я так делал

Miguel Santiago 10.08.2018 17:10

Кто они" ?

463035818_is_not_a_number 10.08.2018 17:10

люди, которые меня "учат"

Miguel Santiago 11.08.2018 18:12
2
4
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Допустим, ваша цель - переписать функцию sumVec, вам просто нужно префикс вашей функции с помощью template<typename T> и заменить каждый int на T в вашей функции. Но я бы рекомендовал оставить int для индексного типа.

template<typename T>
T * sumVec(T* Array1, T* Array2, int Size) {
  T *ptr = new T[Size];
  for(int i=0; i<Size; i++)
    ptr[i]= Array1[i] + Array2[i];

  return ptr;
}

Обратите внимание, что вы должны определить свою функцию перед, вызывающую ее, например https://ideone.com/ZAyCLs

Другие вопросы по теме