数组变量中有更多变量或一个维度?

时间:2017-08-17 22:39:19

标签: c++ c arrays optimization multidimensional-array

我听说维度越少越好,但是从方法B(我已经使用过)改为A是否值得? 使用数组变量的最佳方法是什么?

C

中的示例代码
Method A:
int var1[5][10][5][4];
int var2[5][10][5][4];
int var3[5][10][5][4];

Method B:
int var4[3][5][10][5][4];

2 个答案:

答案 0 :(得分:2)

我认为,如果某事情“更好”与否,则取决于观点,例如:性能,可读性,可维护性,一致性,可能还有更多。你的问题可能没有明确的答案,每个答案都可能是基于意见的。

无论如何,你可以“混合”两种方法,使用单独的变量“查看”“多维”阵列的切片。然后,您可以为相应的上下文选择“最佳”方法:

int main() {

    int var4[3][5][10][5][4] = { {call C:\JModelica.org-2.0\setenv.bat}, {{{2}}}, {enter image description here} };

    int (*var1)[5][10][5][4] = &var4[0];
    int (*var2)[5][10][5][4] = &var4[1];
    int (*var3)[5][10][5][4] = &var4[2];

    return 0;
}

答案 1 :(得分:1)

less dimensions is better - 这是一个非常蹩脚的建议。问题是 - 更好的是什么?!正如评论中所建议的那样,这完全取决于具体情况。如果你需要它 - 你需要它。可能没有更好的方法来表达您的算法。

存在可读性和性能方面的问题。所有数组,无论在多个维度上,都是线性分配在内存中的,因此编译器必须计算索引。性能来自于编译器需要进行比单维数组更复杂的计算。因此,如果您尝试减少维数,可能会将此计算从编译器移到代码中,很可能会降低性能和可读性。

现在,如果您可以将其拆分为不需要任何条件逻辑选择的自变量,请执行此操作。它会改善两者。不要将不相关的变量聚合到一个数组中,它会减少两者。

我想在您的情况下,如果var1var2var3是独立的,请以这种方式使用它们。如果你需要一个循环来浏览它们,请将它们保存在一个数组中。