如何创建动态的多维数组且内存空间连续
大部分同学都会创建一位数组,并且一位数组以创建好内存空间就是连续的。但常常也会要用到创建多维连续空间的数组,下面以二三维为例子,大家看了就明白。这就是数组指针与指针数组的灵活应用。(这里说的创建都是指动态创建)
template <typename T>T **CreateDoubleArray(int m,int n)//m为高度,n为每行的长度{T **cp = new T*[m];T *rp = new T[m*n];cp[0] = rp;for(int i = 1;i < m;++i)cp[i] = rp+i*m;memset(rp,0,m*n*sizeof(T));return cp;}template <typename T>T ***CreateTrebleArray(int m,int n,int x){T ***cp = new T**[m];for(int i = 0;i < m;++i){cp[i] = new T*[n];}T *p = new T[m*n*x];for(int i = 0;i < n;++i)for(int j = 0;j < x;++j){cp[i][j] = p+i*n*x+j*x;}memset(p,0,m*n*x*sizeof(T));return cp;}#include <iterator>#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int **a = CreateDoubleArray<int>(2,2);int ***b = CreateTrebleArray<int>(2,2,2);b[1][1][1] = 100;for(int i =0 ;i < 2;++i)for(int j =0 ;j < 2;++j)for(int q =0 ;q < 2;++q)cout<<b[i][j][q];return 0;}