2011-08-17 238 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