c++ - 如何将函数 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;
}
解决方案
如果您的目标是重写sumVec
函数,您只需在函数中添加前缀template<typename T>
并替换每个int
by 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
推荐阅读
- reactjs - React 水平时间线不起作用....(我正在使用 Next.js)
- python - 如何使用 Jupyter Notebooks 进行打印
- android - 使用 NavDeepLinkBuilder 构建片段回栈
- html - 模型查看器大纲
- c# - 将自定义 HttpResponseMessage 作为 IActionResult 返回
- github - github是否限制每个用户的个人访问令牌数量
- c - c中的简单字符串修改程序
- mysql - 来自多个mysql表的数据到一个xml
- logstash - Logstash 离线插件 SocketError
- vb.net - 如何显示像 Visual Studio 工具提示这样的枚举?