Pae*_*ula 4 c multidimensional-array data-structures
我有以下代码:
#define FIRST_COUNT 100
#define X_COUNT 250
#define Y_COUNT 310
#define z_COUNT 40
struct s_tsp {
short abc[FIRST_COUNT][X_COUNT][Y_COUNT][Z_COUNT];
};
struct s_tsp xyz;
Run Code Online (Sandbox Code Playgroud)
我需要像这样运行数据:
for (int i = 0; i < FIRST_COUNT; ++i)
for (int j = 0; j < X_COUNT; ++j)
for (int k = 0; k < Y_COUNT; ++k)
for (int n = 0; n < Z_COUNT; ++n)
doSomething(xyz, i, j, k, n);
Run Code Online (Sandbox Code Playgroud)
我试图想出一个更优雅,更少脑死亡的方法.(我知道这种多维数组在cpu使用方面是低效的,但在这种情况下这是无关紧要的.)对于我在这里构建事物的方式,有没有更好的方法?
如果您需要4D阵列,那么这就是您所需要的.可以将它"压扁"成一个单一的malloc()"数组",但这并不是那么干净:
abc = malloc(sizeof(short)*FIRST_COUNT*X_COUNT*Y_COUNT*Z_COUNT);
Run Code Online (Sandbox Code Playgroud)
访问也更加困难:
*(abc + FIRST_COUNT*X_COUNT*Y_COUNT*i + FIRST_COUNT*X_COUNT*j + FIRST_COUNT*k + n)
Run Code Online (Sandbox Code Playgroud)
所以这显然有点痛苦.
但是你确实有这样的优势:如果你需要简单地迭代每一个元素,你可以做到:
for (int i = 0; i < FIRST_COUNT*X_COUNT*Y_COUNT*Z_COUNT; i++) {
doWhateverWith *(abc+i);
}
Run Code Online (Sandbox Code Playgroud)
很明显,这种方法对于大多数用途来说非常难看,并且对于一种类型的访问来说有点整洁.它也有点内存保守,只需要一个指针解引用而不是4.
| 归档时间: |
|
| 查看次数: |
2891 次 |
| 最近记录: |