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);
来源:https://www.cnblogs.com/taoXiang/p/12417302.html