如何获取多维结构数组的长度?

3

我有一个类,在构造函数中获取一个三维结构数组。为了进行进一步的计算,它还需要每个维度的长度。

以下是一个简短的示例:

MyStruct*** mySt;
mySt = new MyStruct**[5]
mySt[0] = new MyStruct*[4]
mySt[0][0] = new MyStruct[3]

我该如何获取这些值(5、4、3)并将它们保存在新类中,而不必显式地将它们发送到构造函数中?


1
除非您提前保存尺寸,否则无法完成。请使用std::vectorstd::array - Captain Obvlious
2
将它们存储在常量中。 - OMGtechy
这就是我试图避免的。因为如果我保存它们,我还必须将它们传递给创建类,使代码变得有些混乱。但看来我不得不这样做。 - Eskalior
1
你的“3D数组”没有大小。这种制作ND数组的问题在于,并非所有列/行/深度都必须具有相同的长度。就像你创建的那个一样,除了[0,0,:]之外的所有行长度都为0。 - user3528438
@Eskalior 你可以这样做,但这不是标准所强制执行的。 - user3528438
显示剩余6条评论
1个回答

3
您不能从使用new分配并存储为指针的纯C ++数组中获取大小:没有语言结构可让您检索数组大小。
有两种处理此情况的选项:
  • 在C ++中使用支持大小调整的容器,例如向量的向量std::vector
  • 在C(或C++,如果您更喜欢数组)中构造一个单独的3D大小数组,并将其与mySt数组一起传递。

我不认为“纯C++数组”无法获取大小是正确的。这正是std::extent所用之处,但如果你只有一个指针,你无法获取纯C++ 数组的大小。 - Chris Drew
1
@ChrisDrew 你说得对,我应该澄清一下我所说的是 OP 帖子中的情况。当然,你可以使用 std::extent 或旧方式的 sizeof 相除来获取数组类型变量的元素数量。 - Sergey Kalinichenko

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