说你有这样定义维度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