C++:模板参数列表

C++: Template argument list

本文关键字:参数 列表 C++      更新时间:2023-10-16

我正在尝试创建一个程序,该程序将采用原始数组,创建一个大两倍的数组,然后让原始值出现两次。

我很确定我的函数代码是正确的,但我无法弄清楚我需要在 main 中放入什么才能使其工作。我目前收到"函数样式转换或类型构造的预期'('"和"没有模板参数列表就无法引用类模板'数组'"编译器错误。

关于我需要修复什么才能完成这项工作的任何想法?

void repeatArray(double **array, int size)  
{ //Dynamically allocate array that holds an amount of elements = size  
double *resize = new double[size * 2];  
for (int i = 0; i < size; i++)  
{
resize[i] = (i + 1) * 2;  
delete [] *array;  
*array = resize;  
}
}
int main()  
{
const int size = 5;  
**array[] = {1.1, 2.2, 3.3, 4.4};  
repeatArray(double **array, size);  
for (int i; i < size; i++)  
{
cout << array;  
}
}

您正在尝试分配一维数组并使指针指针指向为一维数组分配的数据,并且您正在为一维数组分配的内存上调用错误的删除。

如果目标是将使用new动态分配的数组的大小加倍,则可以执行以下操作

void resizeArray(int** arr, int new_size) {
delete[] (*arr);
*arr = new int[new_size];
// do your initialization here
}
int main() {
const int size = 5;
int* arr = new int[5];
resizeArray(&int, 5);
}

但请记住,当您使用动态数组时。 使用std::vector几乎总是比滚动自己的数组更好。

In C++14

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T>
void repeatArray(std::vector<T> &array) {
int element_count = array.size();
array.resize(2*element_count);
for (int i=0; i<element_count; i++)
array[i+element_count] = array[i];
}
int main() {
vector<float> array = {1.1, 2.2, 3.3, 4.4};
repeatArray(array);
for (auto &i : array) {
cout << i << ",";
}
}