Rob*_*rtS 4 c c++ arrays multidimensional-array array-difference
我知道这个问题乍一看有点好笑。但是当我遇到这个问题时,我\xc2\xb4ve发现了C和C++高级用户@BasileStarynkevitch的评论,他在其中声称多维数组不应该更好地使用,无论是在C还是在C++中:
\n\n\n\n\n不要在 C++(或 C)中使用多维数组。
\n
为什么?为什么\xc2\xb4t 我应该在 C++ 和 C 中使用多维数组?
\n\n他这句话的意思是什么?
\n\n随后,另一位网友对此评论进行了回复:
\n\n\n\n\n巴塞尔是对的。可以在 C/C++ 中声明 3D 数组,但会导致太多问题。
\n
哪些问题?
\n\n我经常使用多维数组,并且认为使用它们没有任何缺点。相反,我认为它只有优点。
\n\n使用多维数组是否存在我不知道的问题?
谁能给我解释一下它们的意思吗?
这是一个相当广泛(且有趣)的与性能相关的主题。我们可以讨论缓存未命中、多维数组初始化的成本、向量化、std::array堆栈上多维分配、堆上多维分配std::vector、对后两者的访问等等。
也就是说,如果您的程序可以很好地处理多维数组,请保持原样,特别是如果您的多维数组具有更高的可读性。
与性能相关的示例:
考虑 astd::vector包含许多std::vector<double>:
std::vector<std::vector<double>> v;
Run Code Online (Sandbox Code Playgroud)
我们知道std::vector里面的每个对象v都是连续分配的。std::vector<double>此外,a in中的所有元素v都是连续分配的。然而,并非所有double存在的 都v位于连续内存中。因此,根据您访问这些元素的方式(多少次、以什么顺序……),与在连续内存中包含所有 的单个元素相比, std::vectorofstd::vector可能会非常慢。std::vector<double>double
矩阵库通常将 5x5 矩阵存储在大小为 25 的普通数组中。