首页 > 解决方案 > 如何将函数 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;
}

标签: c++templatespointers

解决方案


如果您的目标是重写sumVec函数,您只需在函数中添加前缀template<typename T>并替换每个intby 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


推荐阅读