我已經寫了存儲二維數組作爲一維數組和重載索引操作如下:a類:如何在行主要順序中聲明3DArray?
inline T* operator [](const int Index) {return Data.get() + Height * Index;}
如果數據是std::unique_ptr<int[]>
。
這允許我這樣做:MyInstance[I][J]
獲取值作爲行主要順序和MyInstance[J][I]
獲取作爲列主要順序的值。
我該怎麼做3D數組?我試圖弄清楚它是如何在內存中進行佈局的,所以我這樣做了:
int main()
{
//index = [i + width * (j + depth * k)];
const int width = 4, height = 4, depth = 4;
int l = 0;
int ptr[width][height][depth] = {0}; //Same as int ptr[width * height * depth]; ?
//int ptr[height][width][depth]??
for (int i = 0; i < depth; ++i) //i < ??
{
for (int j = 0; j < height; ++j) //j < ??
{
for (int k = 0; k < width; ++k) //k < ??
{
ptr[i][j][k] = l++;
}
}
}
int* p = &ptr[0][0][0];
for (int i = 0; i < depth; ++i)
{
for (int j = 0; j < height; ++j)
{
for (int k = 0; k < width; ++k)
{
std::cout<<p[i + width * (j + depth * k)]<<"\n";
}
}
}
return 0;
}
但是,它沒有以正確的順序打印。它似乎以隨機順序或列主要順序打印。
我不知道如何聲明數組:
int arr[depth][height][width];
int arr[width][height][depth];
int arr[height][width][depth];
int arr[depth][width][height];
int arr[height][depth][width];
int arr[width][depth][height];
任何想法?
我想你可能想使用是'的std ::的unique_ptr的''不是的std ::的unique_ptr ' –
ChetS