2017-06-15 57 views

回答

3

它看起来像你在c + +/cli中使用一个托管数组(尽管截至写作时间,你还没有确认这一点)。

在使用cli::array例如,假设你,你可以从its documentation看到它从System::Array继承,而类的所有方法都是适用的。如果您阅读了该课程'own documentation,您会发现有一个Array::GetLength(Int32)方法可让您获得给定维度的大小(请参阅该方法的文档here)。

例如,

array<ObjectType^, 3>^ array_var = gcnew array<ObjectType^, 3>(3, 4, 5); 

声明大小3*4*5的一个新的3D阵列。

array_var->GetLength(2) 

将返回5(因为尺寸从0开始照常编号)。您还可以使用array_var->Rank来获取阵列的维数。

+0

太棒了!这工作! Rank方法对我来说也非常有用! – areify

-2

假设你使用C++的std ::数组和NOT .NET数组

也就是说阵列不是如何的std ::工作。这不会是一个3D数组(基于你给出的代码)。它实际上是一个一维数组。

所以,你的代码将实际上最终看起来像这样(以伪代码):

std::array<int, 3> array_var; 
sizeof(array_var[i]) * sizeof(int); 

这应该工作。至于每个维度。那么,你可以做到这一点

std::array<std::array<std::array<int, 3>, 3>, 3> test; 

sizeof(test[i][0][0]) * sizeof(int); 
sizeof(test[0][j][0]) * sizeof(int); 
sizeof(test[0][0][k]) * sizeof(int); 

我不知道这是否是最有效的方法(相信我,它不是),我敢肯定更加有经验的程序员就能得出更好的方法。但是,你走了!

顺便说一句,对不起,如果这没有回答你的问题。我真的不明白,但我还是刺了一刀。

享受! :)

+0

您不能将托管引用放入标准容器中。 – Rook

+0

@那么这是.net他在说什么?我想,由于^,我的坏方式,我忘了修理我的帖子。 –

+2

目前还不清楚OP在谈论什么,但最好等到他们在回答之前澄清完毕;-) – Rook

相关问题