说我有一个像这样的数组:
double theArray[2][5][3][4];
我不太明白最后一个维度。
first is [][][][][]
second is [][][][][]
[][][][][]
third would make it 3 dimensional,
第四个会做什么?
说我有一个像这样的数组:
double theArray[2][5][3][4];
我不太明白最后一个维度。
first is [][][][][]
second is [][][][][]
[][][][][]
third would make it 3 dimensional,
第四个会做什么?
C++(就像之前的 C)并没有真正的多维数组,所以它们都不是真正的 2、3、4(等)维数组。
相反,C++ 提供的是数组、数组的数组等。有了四组括号,您就有了一个数组数组的数组。
现在,忘记我说过的那些——在 C++ 中使用数组很少是一个好主意,使用数组的数组通常更糟糕。如上所示,伪 4D 数组还要糟糕很多倍。只是不要这样做。
如果需要模仿2D、3D等,数组,使用类。它使生活变得更加简单。
第四个维度是时间。它与三个空间维度一起形成了时空。
double theArray[2] ==> [][]
double theArray[2][5] ==> [][], [][], [][], [][], [][]
double theArray[2][5][3] ==> [][], [][], [][], [][], [][]
[][], [][], [][], [][], [][]
[][], [][], [][], [][], [][]
double theArray[2][5][3][4] ==> .............
在 C 和 C++ 中,二维数组只是数组的数组——不多也不少。
3维数组是数组数组的数组。
你有什么:
double theArray[2][5][3][4];
是一个4维数组,一个数组数组数组。
如果您在考虑空间维度,则数组的任何维度都不一定具有任何物理意义。它们只是元素的有序序列,其中序列本身可能是序列,依此类推。
数组可以具有的维数没有限制(除了编译时和运行时存储空间,也可能是编译器施加的一些任意限制)。
对于二维数组,您可以认为元素以矩形网格布局:
[][][][]
[][][][]
[][][][]
但实际上整个过程是线性的,每一行紧跟在内存中的前一行之后。
[][][][][][][][][][][][]
- row0 -- row1- - row2 -
您还可以构建其他类似于多维数组的数据结构。如果您使用指针、指针数组等,则元素和行可能会在内存中任意分散。但这对于大多数用途来说并不重要。
comp.lang.c FAQ的第 6 节很好地讨论了 C 中数组和指针之间经常令人困惑的关系,其中大部分也适用于 C++。
C++ 提供了其他数据结构,作为标准库的一部分,它们比 C 风格的数组更灵活、更健壮。
假设我们要使用多维数组来跟踪世界人口。
// Population per country:
int population[ C ];
// the 1st dimension is the country index, C is the number of countries
// Population per country per state:
int population[ C ][ S ];
// the 2nd dimension is the state index, S is the max number of states per cuntry
// Population per country per state per county:
int population[ C ][ S ][ N ];
// the 3rd dimension is the county index, N is the max number of county per state
// Population per country per state per county per city:
int population[ C ][ S ][ N ][ I ];
// the 4th dimension is the city index, I is the max number of city per county
// Population per country per state per county per city per gender
// Population per country per state per county per city per gender per age-group
注意:这只是一个例子,它肯定不是人口建模的最佳方法。
注 2:参见 Jerry Coffin 的回答。
我想要一个技巧来可视化什么是 4 维数组(数学术语中的 4 维矩阵),您可以将其表示为立方体数组(如果维度不相等,则矩形平行六面体更准确)。
就像一个 3 维数组可以表示为一个矩阵数组