Skip to content

Instantly share code, notes, and snippets.

@eyelash
Created May 2, 2015 13:29
Show Gist options
  • Select an option

  • Save eyelash/bd3c9e01508f7fcded3d to your computer and use it in GitHub Desktop.

Select an option

Save eyelash/bd3c9e01508f7fcded3d to your computer and use it in GitHub Desktop.
C++ dynamic two-dimensional array
#include <cstdlib>
template <class T> class Array2D {
int size, stride;
T* data;
public:
Array2D (int m, int n): size(m*n), stride(n) {
data = (T*) malloc (size*sizeof(T));
for (int i=0; i<size; i++)
new (data + i) T ();
}
Array2D (const Array2D& array): size(array.size), stride(array.stride) {
data = (T*) malloc (size*sizeof(T));
for (int i=0; i<size; i++)
new (data + i) T (array.data[i]);
}
~Array2D () {
for (int i=0; i<size; i++)
(data + i)->~T ();
free (data);
}
Array2D& operator = (const Array2D& array) {
for (int i=0; i<size; i++)
(data + i)->~T ();
if (size != array.size) {
free (data);
size = array.size;
data = (T*) malloc (size*sizeof(T));
}
stride = array.stride;
for (int i=0; i<size; i++)
new (data + i) T (array.data[i]);
return *this;
}
T* operator [] (int i) {
return data + (i * stride);
}
const T* operator [] (int i) const {
return data + (i * stride);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment