1. 动态二维数组
目的:方便的构造一个m行n列的矩阵
2. 简单实现
这里用函数模板写
C++不支持函数模板的分离编译,因此需要把声明实现都写在一个文件里
myarray.h:
1 #ifndef TESTCPLUS_MYARRAY_H 2 #define TESTCPLUS_MYARRAY_H 3 4 #include <iostream> 5 using namespace std; 6 template <typename T> 7 /* 8 功能:malloc申请空间部分成功,部分失败,则回收成功的部分 9 */ 10 static void freePartMatrix(T** pary,int i) 11 { 12 for(int j=i-1;j>=0;j--) { 13 if(pary[j] != nullptr) { 14 free(pary[j]); 15 pary[j] = nullptr; 16 } 17 } 18 free(pary); 19 } 20 /* 21 功能:获取一个m行n列的二维数组,或者说一个m行n列的矩阵 22 函数模板 23 */ 24 template <typename T> 25 T** getMNMatrix(int m,int n) 26 { 27 if(m<1 || n<1) { 28 return nullptr; 29 } 30 T** pary = nullptr; 31 pary = (T**)malloc(m*sizeof(T*)); 32 if(pary == nullptr) { 33 return nullptr; 34 } 35 for(int i=0;i<m;++i) { 36 pary[i] = (T*)malloc(n*sizeof(T)); 37 if(pary[i] == nullptr) { 38 freePartMatrix(pary,i); 39 pary = nullptr; 40 return nullptr; 41 } 42 memset(pary[i],0,n*sizeof(T)); 43 } 44 return pary; 45 } 46 47 template <typename T> 48 void print_matrix(T** ary,int m,int n) 49 { 50 if(ary == nullptr) { 51 cout<<"Empty Matrix"<<endl; 52 } 53 for(int i=0;i<m;++i){ 54 for(int j=0;j<n;++j) { 55 cout<<ary[i][j]<<" "; 56 } 57 cout<<"\n"; 58 } 59 } 60 #endif //TESTCPLUS_MYARRAY_H
myarray.cpp
1 #include "myarray.h"
main.cpp
1 int m,n; 2 cin>>m>>n; 3 int** array = getMNMatrix<int>(m,n); 4 print_matrix<int>(array,m,n);