[英]n-dimensional c++ array. How`s that possible?
当GCC允许我这样做时,我感到困惑:
int t[10][10][10][10][10];
我意识到int i[N][N]
是NxN
矩阵,其中前N
表示行,第二N
表示列。 此外, int i[N][N][N]
的第三个N
意味着深度,给出了一个三维数组。
我不明白int i[N][N][N][N]
及以后是什么意思。
第四个维度是时间,但这不适用于此。
那么,这是否意味着当我到达第三个时,我可以让逻辑消失?
我发现库类比对于可视化多维数组非常有用:
在数学世界中,维度的数量无关紧要。 它最终会达到一个人们无法再将其可视化的程度。
尺寸正是您想要制作的尺寸。 例如,深度和时间只有在处理这些概念时才有意义。
它不一定是空间和时间 。 实际上,C ++标准称它们为范围 。
假设您有十种不同的奶酪,并且您希望评估某人喜欢某种特定顺序的可能性。 你可以将它存储在你的int t[10][10][10][10][10];
,具有范围意义,分别为:最喜欢的奶酪,第二喜欢的奶酪,第三喜欢的奶酪,第四喜欢的奶酪,第五喜欢的奶酪,以及最不喜欢的奶酪。 有人喜欢5-4-6-3-2-1的奶酪的可能性表示为t[5][4][6][3][2][1]
。
关键是,语言不会将区域语义附加到范围。 这取决于你这样做。
N维数组不仅仅是一个C ++的东西。 它似乎遍及数学,物理,各种其他科学等。
这是一个例子:假设你想按位置(x,y,z),时间和“哪个用户生成数据”来索引数据。 对于在x1,y1,z1,time1和user1生成的数据点,您将其保存在dataArray[x1][y1][z1][time1][user1] = myNewData
。
在编程中,除非您直接尝试表示世界,否则不要考虑传统几何的多维数组。 最好将每个连续的“维度”视为包含数组的另一个数组。 有几种用例可能出现这种情况。 但是,如果你使用三个以上的维度我不会再把它想象为数组甚至是“数组数组”,我更喜欢树,它们更接近你如何编程需要超过3级深度的东西。
一个例子是树,你有一个根节点,它有节点也有节点。 如果你想对某些东西进行排序,树是一个很好的工具。 假设你想要排序一堆随机出现的数字。 您将创建根目录中的第一个数字。 如果第一个数字是5,而下一个数字是7,那么你将7放到根节点5的“右边”。如果你得到3然后是4,你可以将3插入到5的“左”,然后是3的“右”。如果你按顺序遍历这棵树(总是向左走树,只有在没有新节点然后向右走的时候再回来),你将得到一个排序列表:3,4,5,7。
5
/ \
3 7
\
4
在这里,您可以看到树结构。 如果你在C中这样做,你会使用结构,看起来像这样(我使用的是伪代码):
struct Node{
int val;
Node left;
Node right;
}
Binary Trees上有很多材料(我一直在解释),但主要是我希望你摆脱数组的概念“像空间中的维度”,更多的只是一个可以存储元素的数据结构。 有时二叉树或其他数据结构太复杂,并且5维或更多维数组可能更便于存储数据。 我现在还不太想到一个例子,但它们之前已被使用过。
作为物理三维生物,我们无法“可视化”第4,第5,第6(或更高)物理尺寸代表什么。
第四维将我们的感知扩展到第四方向 ,该方向将与我们自然感知的高度,宽度和深度方向正交。
是的 - 几何变得怪异!!
为了让我们感受到这个想法, 在这个视频中, 卡尔·萨根想象一下,生活在二维世界中的一个完美平坦的2d生物(一个小方块)会遇到一个神秘的3D生物会是什么感觉。
这个3D生物(可疑地类似于苹果)主要存在于这个神秘的第三维度中,小方块不能“看到”。 它只能感知苹果与其2d平面世界相交的点,即它的投影 ......
根据今天的标准,视频看起来很老套,但在物理/几何方面仍然是我在那里看到的最好的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.