C ++:模板参数列表

时间:2017-08-03 02:09:33

标签: c++

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

我非常确定我的函数代码是正确的,但是我无法弄清楚我需要把它放在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;  
}
}

2 个答案:

答案 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 << ",";
    }
}