您的位置:首页 > 其它

如何创建动态的多维数组且内存空间连续

2013-09-30 22:26 381 查看
大部分同学都会创建一位数组,并且一位数组以创建好内存空间就是连续的。但常常也会要用到创建多维连续空间的数组,下面以二三维为例子,大家看了就明白。这就是数组指针与指针数组的灵活应用。(这里说的创建都是指动态创建)

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*
;
}
T *p = new T[m*n*x];
for(int i = 0;i < m;++i)//昨天这个地方代码有点问题,不好意思对不起大家了哈....
for(int j = 0;j < n;++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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: