Skip to content

Instantly share code, notes, and snippets.

@mgarg1
Last active August 22, 2019 10:52
Show Gist options
  • Select an option

  • Save mgarg1/1a34298f310d0f103671e2589f87a185 to your computer and use it in GitHub Desktop.

Select an option

Save mgarg1/1a34298f310d0f103671e2589f87a185 to your computer and use it in GitHub Desktop.
efficient 2d array implementation refer : https://stackoverflow.com/a/936709/1496826
// based on https://stackoverflow.com/a/936709/1496826
template <typename T,typename sizeDim=size_t>
struct array2d{
T *arr;
sizeDim row,col;
array2d(sizeDim r,sizeDim c,T defVal=0):row(r),col(c){
arr = new T[r*c];
for (sizeDim i = 0; i < r; ++i){
for (sizeDim j = 0; j < c; ++j){
get(i,j) = defVal;
}
}
}
T& get(sizeDim ri,sizeDim ci) const{
if(ri >= row|| ci >= col){
cout << "invalid array index";
}
return arr[ri*col+ci];
}
T operator()(sizeDim ri,sizeDim ci) const{
return get(ri,ci);
}
~array2d(){
delete[] arr;
}
void print() const{
for (sizeDim i = 0; i < row; ++i){
for (sizeDim j = 0; j < col; ++j){
cout << get(i,j) << "\t";
}
cout << "\n";
}
}
};
int main(){
array2d<int> arr1(3,4,5);
arr1.print();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment