我正在尝试创建一个程序,它将采用一个原始数组,创建一个两倍大的数组,然后让原始值出现两次。
我非常确定我的函数代码是正确的,但是我无法弄清楚我需要把它放在main中才能使它工作。我目前正在接受"预期'('用于功能式演员或类型构建"和#34;无法参考课程模板'数组'没有模板参数列表"编译器错误。
关于我需要解决什么才能使其发挥作用的任何想法?
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;
}
}
答案 0 :(得分:1)
您正在尝试分配一维数组并使指针指针指向为一维数组分配的数据,您也在为一维数组分配的内存上调用错误的删除。
如果目标是使用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
比滚动自己的数组几乎总是更好。
答案 1 :(得分:1)
在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 << ",";
}
}