說你有這樣定義維度x每Y(每Z)的矩陣:指針2或3維子陣列/子矩陣
int** tab = new int*[x];
for(int i=0; i<x; ++i) tab[i] = new int[y];
或
int*** tab = new int**[x];
for(int i=0; i<x; ++i) {
tab[i] = new int*[y];
for(int j=0; j<y; ++y) tab[i][j] = new int[z];
}
是有任何智能的方法來訪問子矩陣(得到int**(*)
沒有數據複製,普通的C++),它將具有左上(前)角[a,b(,c)]和[A,B(,C)]的大小] ?
下面是(更好或更差)問題的圖形示例。
訪問子數組只能以非常有限的方式工作。看看[SO:二維數組如何存儲在內存中?](https://stackoverflow.com/q/38204677/7478597)瞭解原因。 – Scheff
順便說一句。你可以用int(* pA3d)[3] [4] [5] = new int [3] [4] [5];來分配一個3d數組;但是這僅限於具有固定大小的多暗數組。對於不同的尺寸,_I_會降低多點模糊。麻煩和1昏暗的工作。陣列。如果你真的想要這個多昏暗的東西'std :: vector'可以使你的生活更輕鬆(例如'std :: vector>>'但是又一次:我寧願'std: :vector '並且自己做多偏暗索引,你可以把它作爲Eigen lib包裝在一個專用的'class MyMatrix'中。) –
Scheff
嗯。更好地忘記'int(* pA3d)[3] [4] [5] = new int [3] [4] [5];'。我真的不確定指向數組的指針與指向第一個元素的指針。 (雖然我記得自己有一天在好奇心的嘗試中掌握了它,但這種哭聲不絕於耳。) – Scheff