首页 > 解决方案 > 如何在 C++ 类或结构中声明多维数组成员?

问题描述

我创建了一个包含多维数组成员的数据结构。这个数组的维度最终由用户输入提供,并且在结构的构造中是已知的,但在此之前不知道。我提供了一个最小的工作示例,希望能证明这个问题:

struct MyStruct{
    int rows;
    int cols;
    float data[][];

    MyStruct(int m, int n) : rows(m), cols(n){
        data[m][n];
    }
};

在 VSC 中,我得到一个解析错误float data[][];,上面写着:'一个数组可能没有这种类型的元素'

那么,有没有办法在构造的时候初始化多维数组的维度呢?还是我需要创建一个新的结构/类来保存数据?

标签: c++multidimensional-arrayconstructor

解决方案


如何在 C++ 类或结构中声明多维数组成员?

像这样:

struct MyStruct{
    float data[42][123];
};

该数组的维度最终由用户输入提供

如果数组是成员变量,这是不可能的。数组变量的大小必须是 C++ 中的编译时间常数。此外,必须知道数组元素类型的大小,因此即使是动态数组也只能具有恒定大小的内部维度。

还是我需要创建一个新的结构/类来保存数据?

首先,您必须动态创建数组。最简单的解决方案是使用std::vector.

其次,您应该使用平面一维向量,其中行一个接一个地存储。另一种更简单的替代方法是向量向量,但这通常效率低下,除非您需要特定的操作,例如在这种情况下特别快的重新排序行。


推荐阅读