当GCC允许我这样做时,我变得很困惑:
int t[10][10][10][10][10];
我知道
int i[N][N]
是一个NxN
的矩阵,其中第一个N
表示行,第二个表示列。同样,int i[N][N][N]
中的第三个N
表示深度,给我们提供了一个3D数组。我不明白
int i[N][N][N][N]
及以上的含义。第四维是时间,但在这里并不适用。
所以,这是否意味着当我到达第三个时,我可以让逻辑消失?
当GCC允许我这样做时,我变得很困惑:
int t[10][10][10][10][10];
int i[N][N]
是一个NxN
的矩阵,其中第一个N
表示行,第二个表示列。同样,int i[N][N][N]
中的第三个N
表示深度,给我们提供了一个3D数组。int i[N][N][N][N]
及以上的含义。我觉得用图书馆的类比很有助于想象多维数组:
在数学世界中,维度的数量并不重要,只有当我们无法将其可视化时,它才会变得棘手。
这里的“dimensions”可以理解为你想要给它们赋予的任何含义。例如,当你涉及到深度和时间时,它们才有意义。
它不一定与空间和时间有关。事实上,C++标准将它们称为extents。
假设你有十种不同的奶酪,并且你想评估某个人喜欢它们的可能性顺序。你可以将其存储在int t[10][10][10][10][10];
中,分别表示:最喜欢的奶酪、第二喜欢的奶酪、第三喜欢的奶酪、第四喜欢的奶酪、第五喜欢的奶酪和最不喜欢的奶酪。某个人喜欢奶酪的顺序为5-4-6-3-2-1的可能性将被表示为t[5][4][6][3][2][1]
。
重点是,语言没有将“extents”附加到特定领域语义上。这取决于你自己。
多维数组不仅仅是C++的东西。它在数学、物理、各种其他科学等领域都出现过。
这里有一个例子:假设您想按位置(x,y,z)、时间和“生成数据的用户”对数据进行索引。对于在x1,y1,z1,time1收集且由user1生成的数据点,您将其保存在dataArray[x1][y1][z1][time1][user1] = myNewData
中。
5
/ \
3 7
\
4
struct Node{
int val;
Node left;
Node right;
}
关于二叉树(我一直在解释的内容),有很多资料可供参考,但我主要想让你远离数组“像空间维度”的概念,而更多地将其视为可以存储元素的数据结构。有时候,二叉树或其他数据结构过于复杂,使用一个五维或更高维的数组可能更方便存储数据。我现在无法想到一个例子,但它们以前已经被使用过。