📄 myarrays.h
字号:
// MyArrays.h 动态分配多维(2,3,4维)数组(C/C++) Written by Li Qing.#ifndef MYARRAYS_H#define MYARRAYS_H//#define USE_CPP_COMPILER // 如果仅用C编译器,请将此行全改成注释行// for Cvoid *Calloc1DArray(int n, int size_t);void Free1DArray(void *array);void **Calloc2DArray(int n2, int n1, int size_t); // 仍然按照“最右边的下标变化最快”的原则void Free2DArray(void **array);void ***Calloc3DArray(int n3, int n2, int n1, int size_t);void Free3DArray(void ***array);void ****Calloc4DArray(int n4, int n3, int n2, int n1, int size_t);void Free4DArray(void ****array);// for C++#ifdef USE_CPP_COMPILER#ifndef NULL #define NULL 0#endiftemplate <class T> T *New1DArray(int n, T *&array);template <class T> void Delete1DArray(T *&array);template <class T> T **New2DArray(int n2, int n1, T **&array);template <class T> void Delete2DArray(T **&array);template <class T> T ***New3DArray(int n3, int n2, int n1, T ***&array);template <class T> void Delete3DArray(T ***&array);template <class T> T ****New4DArray(int n4, int n3, int n2, int n1, T ****&array);template <class T> void Delete4DArray(T ****&array);//=================== for 1D ===================template <class T> T *New1DArray(int n, T *&array){ array = new T[n]; return array;}template <class T> void Delete1DArray(T *&array){ if(array) delete [] array; array = NULL;}//=================== for 2D ===================template <class T> T **New2DArray(int n2, int n1, T **&array){ int i; array = (T**)new unsigned long[n2]; if(array==NULL) return array; array[0] = new T[n2*n1]; if(array[0]==NULL) { delete array; return array=NULL; } for(i=1; i<n2; i++) array[i] = array[0] + i*n1; return array;}template <class T> void Delete2DArray(T **&array){ if(array[0]) delete [] array[0]; if(array) delete [] array; array = NULL;}//=================== for 3D ===================template <class T> T ***New3DArray(int n3, int n2, int n1, T ***&array){ int i, j; array = (T***)new unsigned long[n3]; if(array==NULL) return array; array[0] = (T**)new unsigned long[n3*n2]; if(array[0]==NULL) { delete array; return array=NULL; } for(j=1; j<n3; j++) array[j] = array[0] + j*n2; array[0][0] = new T[n3*n2*n1]; if(array[0][0]==NULL) { delete array[0]; delete array; return array=NULL; } for(j=0; j<n3; j++) for(i=0; i<n2; i++) array[j][i] = array[0][0] + (j*n2 + i)*n1; return array;}template <class T> void Delete3DArray(T ***&array){ if(array[0][0]) delete [] array[0][0]; if(array[0]) delete [] array[0]; if(array) delete [] array; array = NULL;}//=================== for 4D ===================template <class T> T ****New4DArray(int n4, int n3, int n2, int n1, T ****&array){ int i, j, k; array = (T****)new unsigned long[n4]; if(array==NULL) return array; array[0] = (T***)new unsigned long[n4*n3]; if(array[0]==NULL) { delete array; return array=NULL; } for(k=1; k<n4; k++) array[k] = array[0] + k*n3; array[0][0] = (T**)new unsigned long[n4*n3*n2]; if(array[0][0]==NULL) { delete array[0]; delete array; return array=NULL; } for(k=0; k<n4; k++) for(j=0; j<n3; j++) array[k][j] = array[0][0] + (k*n3 + j)*n2; array[0][0][0] = new T[n4*n3*n2*n1]; if(array[0][0][0]==NULL) { delete array[0][0]; delete array[0]; delete array; return array=NULL; } for(k=0; k<n4; k++) for(j=0; j<n3; j++) for(i=0; i<n2; i++) array[k][j][i] = array[0][0][0] + ((k*n3+j)*n2+i)*n1; return array;}template <class T> void Delete4DArray(T ****&array){ if(array[0][0][0]) delete [] array[0][0][0]; if(array[0][0]) delete [] array[0][0]; if(array[0]) delete [] array[0]; if(array) delete [] array; array = NULL;}#endif // USE_CPP_COMPILER#endif // MYARRAY_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -