2011-08-17 99 views
0

我有一个3D阵列C++多维阵列

double values[30][30][30]; 

我有一个回路,其中我将值分配给该数组; 喜欢的东西:

for(int z = 0;z<30; z++) 
    for (int y = 0;y<30; y++) 
     for (int x = 0;x<30; x++) 
     values[z][y][x] = intensity; 
end 

所以这是我如何填充数组。问题是我想创建除强度之外的列来存储另一个变量。例如,倒数第二行应该是类似于

values[z][y][x] = intensity | distance; 

我希望你明白了。我的知识是有限的,我不能想出一个解决方案。感谢您的建议。

+1

很简单,只需将'values'的类型从原来的值改为一对,再加上'distance'的类型即可。 –

回答

4

这实际上取决于你的数据类型。最简单的方法是使用一个结构:如果您使用

values[z][y][x].intensity = intensity; 
values[z][y][x].distance = distance; 

struct data { 
    float intensity; // or replace 'float' with whatever datatype you need 
    float distance; 
}; 

使用此结构,而不是你现在正在使用的阵列数据类型,再后来就设置的值小值只(例如,对于每一个值仅字符),你还可使用位运算符来存储整数一切:

values[z][y][x] = intensity << 8 | distance; 
intensity = values[z][y][x] >> 8; 
distance = values[z][y][x] & 255; 

但除非你有真正萨维我不会建议你这样做值范围(例如用于保存位图/纹理的东西)。

+0

谢谢,我会读更多关于结构。 – Dead