我需要动态指定数组的大小

时间:2015-02-17 13:58:05

标签: c++ arrays function

我有一个Nx3数组,我需要将其作为一个函数填充(因此矢量不是一个选项)。我已经知道N有多大,因为我将它作为参数提供给函数。我仍然得到这个“必须有一个恒定值”的愚蠢错误,我的代码是:

double bspline_plot(double CP[], double Knot[], const int N, int d, int ncontrol, double *A){
    // CP are the control points
    //Knot is the knot vector
    //N is the number of internal point you want in each segment
    //d is the degree of the polynomials
    double min_x, max_x, dx;
    double *x_1;
    x_1 = new double[N];
    double A[N][2];
    int i, j, M, L;
    min_x = min(Knot);
    max_x = max(Knot);
    dx = (max_x - min_x) / N;
    for (i = 0; i <= N; i = i + 1)
    {
        x_1[i] = min_x + dx*i;
    }

    M = ncontrol;
    L = (sizeof(Knot) / sizeof(*Knot)); 
    if (L < d + M + 1) // This checks if the number of control points are positive
    {
        printf("Incorrectly defined knot vector\n");
        return;
    }
    else //This is the Cox - deBoor algorithm
    {
        for (i = 0; i <= N; i = i + 1)
        {
            for (j = 0; j <= L - 1; j = j + 1)
            {
                A[i][1] = A[i][1] + CP[j, 1] * CdB(j, d, x_1[i], Knot);
                A[i][2] = A[i][2] + CP[j, 2] * CdB(j, d, x_1[i], Knot);
                A[i][3] = A[i][3] + CP[j, 3] * CdB(j, d, x_1[i], Knot);
            }
            A[N][1] = CP[L, 2];
            A[N][2] = CP[L, 2];
            A[N][3] = CP[L, 1];
        }
    }
    return A;
}

我的另一个选择是输入一个数组,然后在函数中找到它的值,但这看起来有点傻。

3 个答案:

答案 0 :(得分:3)

尝试以下列方式使用std :: vector:

std::vector<std::vector<double>> A( N );
for( auto& row : A )
  row.resize( M );

std::vector<std::vector<double>> A( N, std::vector<double>( M ));

答案 1 :(得分:1)

通过快速检查,您的C ++代码中的问题似乎是以下数组声明:

double A[N][2];

您需要按如下方式动态分配此二维数组:

double** A = new double*[N];
for (int i=0; i<N; ++i)
    A[i] = new double[2];

有关详细信息,请查看this SO文章。

答案 2 :(得分:0)

最后我不得不将A分成三个向量,并将函数的输出从double更改为void,并将(现在)三个向量读入为double *。然后,我可以只更改向量的内容,现在它没有显示任何错误。