从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

C&C++ 动态二维数组

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

 

posted @ 2020-03-05 02:17  T,X  阅读(1181)  评论(0编辑  收藏  举报