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

3
我需要将一个double [][6]传递给一个方法。但我不知道怎样创建这个二维数组。 6是一个固定的大小(如果我的术语正确的话,它是一个“字面常量”),该方法接受这个值。我尝试了以下代码,但没有成功...
double *data[6] = new double[6][myVariableSize];

所以,这种方法实际上是:

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

Thanks in advance


1
你看到了什么错误信息? - Jon Cage
5个回答

4

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

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

抱歉,我只是将错误放在您的单间字体中。 - Martijn Courteaux
@Martijn Courteaux,std::bad_alloc通常意味着你的内存不足或者尝试分配一个负长度的数组。myVariableSize的值是多少?你确定它已经初始化了吗? - finnw
要在注释中获得等宽文本,请使用反引号(`)将其括起来。 - finnw
哎呀!谢谢提示!大小是负数! - Martijn Courteaux

3

这应该可以工作:

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

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


+1:这个方法可行。我最初也尝试过同样的方法,但由于某些原因无法编译。 - Jon Cage

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 代替。


boost::array 在C++中可用。std::array 来自C++0x,但已经被许多现代编译器支持。 - Kirill V. Lyadvinsky
它不是一个double[6][],而是一个double[][6]。也就是说,它是一个std::vector<std::array<double, 6>>。 - Puppy
@DeadMG,这取决于OP真正想要什么。从问题中并不清楚。 - Kirill V. Lyadvinsky

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;
}

不明显哪个是正确的方向,但原帖似乎混淆了这两个维度。 - finnw

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;
}

我建议您改用双向向量(double vector)作为2D数组,或者使用Boost的(据我所知)多维数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接