Code: Select all
// simple dynamic 2d and 3d arrays which can be created on runtime and accessed
// like ordinary arrays
// author: Michal Švantner
// date: 4.3.2007
// license: you are free to use this code on your own risk :)
/*------------------------------ example code ----------------------------------
array2d<int> my2darray(10,5);
my2darray[1][3] = -2;
my2darray[2][5] = 240;
array3d<float> my3darray(2,12,3);
my3darray[0][9][0] = 0.456f;
my3darray[1][1][3] = -24.4f;
------------------------------------------------------------------------------*/
#ifndef DYNAMICARRAYS_H
#define DYNAMICARRAYS_H
template <class T> struct arrayData
{
T* data;
T& operator [](int index) {return data[index];}
};
template <class T> struct arrayData2d
{
arrayData<T>* data;
arrayData<T>& operator [](int index) {return data[index];}
};
// dynamic two dimensional array
template <class T> class array2d
{
arrayData<T>* data;
int w, h;
public:
array2d(int iwidth, int iheight) : w(iwidth), h(iheight)
{
data = new arrayData<T>[w];
for(int i=0; i<w; i++) data[i].data = new T[h];
}
~array2d()
{
for(int i=0; i<w; i++) delete [] data[i].data;
delete [] data;
}
arrayData<T>& operator [](int index) {return data[index];}
int width() {return w;}
int height() {return h;}
};
// dynamic three dimensional array
template <class T> class array3d
{
arrayData2d<T>* data;
int w, h, d;
public:
array3d(int iwidth, int iheight, int idepth) : w(iwidth), h(iheight), d(idepth)
{
data = new arrayData2d<T>[w];
for(int i=0; i<w; i++) data[i].data = new arrayData<T>[h];
for(int j=0; j<h; j++)
for(int i=0; i<w; i++) data[i][j].data = new T[d];
}
~array3d()
{
for(int j=0; j<h; j++)
for(int i=0; i<w; i++) delete [] data[i][j].data;
for(int i=0; i<w; i++) delete [] data[i].data;
delete [] data;
}
arrayData2d<T>& operator [](int index) {return data[index];}
int width() {return w;}
int height() {return h;}
int depth() {return d;}
};
#endifPlease report any problems you would find.