n维C++数组。这怎么可能?

4

当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]及以上的含义。
第四维是时间,但在这里并不适用。
所以,这是否意味着当我到达第三个时,我可以让逻辑消失?

2
我不太确定你的问题是什么。如果您有一个多维数据集需要表示,可以使用多维数组... - Oliver Charlesworth
7
对我来说,我想象空间维度从头开始。 3个维度构成一个立方体,4个维度是一排立方体,5个维度则是一个立方体的平面排列,6个维度则是一个立方体的立方体排列,以此类推。 - Corey Ogburn
1
我们所处的世界维度远远超出了我们所能感知到的范围。 - chris
3
数学中的事物并不一定与我们日常可视化的事物相符。 - Don Roby
8
您的数组维度没有必要与物理世界有任何关联。 - Benjamin Lindley
显示剩余10条评论
6个回答

27

我觉得用图书馆的类比很有助于想象多维数组:

  • 8维数组就像一个图书馆
  • 7维数组就像图书馆里的一层楼
  • 6维数组就像图书馆里一层楼中的一个房间
  • 5维数组就像一个房间中的书架
  • 4维数组就像一个书架上的一层
  • 3维数组就像一本书放在书架上的一层上
  • 2维数组就像一本书中的一页
  • 1维数组就像一行文字
  • 0维数组就像一行文字中的一个字符

+1 个好比喻。为什么不引入第九维来表示在图书馆中度过的时间呢?;-) - stefan
我希望我能再点赞几次。 - Corey Ogburn
1
嵌套像这样并不是维度的一个很好的例子,因为维度通常是独立的。在不同的图书馆的同一层的同一书架上的同一本书的同一行的同一字符没有意义。 - Mooing Duck
我相信 这里 是原始答案。 - alex
@alex 不,你错了。这个答案是100%原创的,不基于任何其他人的工作。这个类比是在八十年代由我的计算机科学老师向我建议的。 - Sergey Kalinichenko
@dasblinkenlight 噢,我的错!它确实应该比几年前更老。 - alex

10

在数学世界中,维度的数量并不重要,只有当我们无法将其可视化时,它才会变得棘手。


8

这里的“dimensions”可以理解为你想要给它们赋予的任何含义。例如,当你涉及到深度和时间时,它们才有意义。

它不一定与空间和时间有关。事实上,C++标准将它们称为extents

假设你有十种不同的奶酪,并且你想评估某个人喜欢它们的可能性顺序。你可以将其存储在int t[10][10][10][10][10];中,分别表示:最喜欢的奶酪、第二喜欢的奶酪、第三喜欢的奶酪、第四喜欢的奶酪、第五喜欢的奶酪和最不喜欢的奶酪。某个人喜欢奶酪的顺序为5-4-6-3-2-1的可能性将被表示为t[5][4][6][3][2][1]

重点是,语言没有将“extents”附加到特定领域语义上。这取决于你自己。


3

多维数组不仅仅是C++的东西。它在数学、物理、各种其他科学等领域都出现过。

这里有一个例子:假设您想按位置(x,y,z)、时间和“生成数据的用户”对数据进行索引。对于在x1,y1,z1,time1收集且由user1生成的数据点,您将其保存在dataArray[x1][y1][z1][time1][user1] = myNewData中。


1
在编程中,不要将多维数组视为传统几何学的概念,除非你直接尝试表示世界。更好的方法是将每个连续的“维度”视为另一个包含数组的数组。这可能会出现几种用例。但是,如果您使用超过三个维度,我不再认为它是数组甚至是“数组的数组”,我更喜欢树,因为它们更接近于需要超过3个级别深度的编程内容。
一个例子是树,其中有一个根节点,它有节点,这些节点也有节点。如果你想要排序一些东西,树是一个很好的工具。假设你想要对一堆随机出现的数字进行排序。你会把第一个数字作为根节点。如果第一个数字是5,下一个数字是7,那么你会把7放在根节点5的“右边”。如果你得到了3和4,你会把3插入到5的“左边”,然后把4插入到3的“右边”。如果你按顺序遍历这棵树(总是向左走,只有在没有新节点时才返回并向右走),你最终会得到一个排序好的列表:3、4、5、7。
       5
    /    \
   3      7
     \
      4

在这里,您可以看到树形结构。如果您使用C语言进行此操作,您将使用结构体,它看起来像这样(我使用伪代码):
struct Node{
     int val;
     Node left;
     Node right;
}

关于二叉树(我一直在解释的内容),有很多资料可供参考,但我主要想让你远离数组“像空间维度”的概念,而更多地将其视为可以存储元素的数据结构。有时候,二叉树或其他数据结构过于复杂,使用一个五维或更高维的数组可能更方便存储数据。我现在无法想到一个例子,但它们以前已经被使用过。


1
在我打这段话的时候,我没有看到dasblinkenlight的回答,但那是一个可以用九维数组表示的绝佳例子。现在,我不建议使用那种数据结构来存储这样的东西,但它确实有助于提供一个多维数组可能适用的用例示例。 - kurtzbot

0
作为三维实体,我们无法“想象”第四、第五、第六(或以上)物理维度代表什么。
第四个维度将扩展我们的感知到第四个方向,这将与我们自然感知的高度、宽度和深度方向正交。是的——几何变得奇怪了!
为了让我们对这个想法有所感觉,在这个视频中,卡尔·萨根想象一个完美平坦的二维生物(一个小正方形),生活在一个二维世界中,遇到了一个神秘的三维生物。
这个三维生物(非常类似于一个苹果)主要存在于这个小正方形无法“看到”的神秘第三维度。它只能感知与其二维平面世界相交的苹果点,即它的投影...
虽然这个视频在今天看来有些老式,但在物理/几何学方面仍然是我见过的最好的解释。

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