繁体   English   中英

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

[英]How to declare a multidimensional array member in a C++ class or struct?

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

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

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

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

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

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

像这样:

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

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

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

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

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

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

你不应该在 C++ 中使用 C 风格的 arrays。 从来没有必要这样做。

你的问题需要一个std::vector

你可以写

#include <vector>

struct MyStruct {
    std::vector<std::vector<float>> data{};
    MyStruct(size_t m, size_t n) {
        data.resize(m);
        for (auto& v : data) v.resize(n);
    }
};

int main() {
    MyStruct ms(5,8);
    return 0;
}

由于向量可以在运行时动态增长,因此无需在构造期间执行所有这些调整大小的操作。 不必要。

而且, rows 和 cols 不是必需的。 向量知道它的大小。

所以,最好的,如果你会考虑std::vector作为解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM