C ++:二维数组:一维固定?

时间:2010-08-10 12:38:04

标签: c++ memory-management heap multidimensional-array

我需要将double [][6]传递给方法。但我不知道如何创建这个二维数组。

6是一个固定大小(或“文字常量”,如果我的术语是正确的),该方法接受。我正在尝试这样的事情,但没有成功......

double *data[6] = new double[6][myVariableSize];

因此,该方法看起来像:

int myMethod(double obj_data[][6]);

提前致谢

5 个答案:

答案 0 :(得分:3)

在C ++中,您可以使用std::array<std::vector<double>, 6>

typedef std::array<std::vector<double>, 6> my_array_t;

int myMethod( const my_array_t& obj_data );

如果您的编译器仍不支持std::array,则可以改为使用boost::array

答案 1 :(得分:3)

我无法从问题中找出哪个维度,但这可能值得一试:

double (*data)[6] = new double[myVariableSize][6];

答案 2 :(得分:3)

这应该有效:

int myMethod(double obj_data[][6])
...
int myVariableSize = 10;
double (*data)[6] = new double[myVariableSize][6];
myMethod(data);

如前所述,只有第一个维度可以变化!

答案 3 :(得分:1)

您的方法定义应如下所示(以符合您的定义):

int myMethod(double obj_data[6][]);

..但这不是有效的C ++,因为只有第一个维度可以是未定义的。请尝试以下方法:

int myMethod(double **obj_data, const int numOfColumns, int numOfRows)
{
    // Set the element in the last column / row to 5
    obj_data[numOfRows-1][numOfColumns-1] = 5;

    return 0;
}


int main(int argc, char* argv[])
{
    // Define array size
    int myNumOfRows = 5;
    const int numOfColumns = 6;

    // Allocate memory
    double** data = new double*[myNumOfRows];
    for (int i = 0; i < myNumOfRows; ++i)
    {
        data[i] = new double[numOfColumns];
    }

    // Do something with the array
    myMethod(data, numOfColumns, myNumOfRows);

    return 0;
}

答案 4 :(得分:0)

我和我的同事可能无法解决您提议的问题。但这确实有效并且确实可以编译:

int myMethod(double** obj_data)
{
    return 5;
}

int _tmain(int argc, _TCHAR* argv[])
{
    const int myVariableSize = 3;
    double** b = new double*[3];
    for (int i = 0 ; i < 3;i++)
    {
        b[i] = new double[myVariableSize];
    }

    myMethod(data);

    return 0;
}

我建议你回去使用双向量作为2D数组,或者使用一些Boost(所以我被告知)多维数组。