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);