首页 > 编程语言 > 详细

C&C++ 动态二维数组

时间:2020-03-05 09:52:40      阅读:56      评论:0      收藏:0      [点我收藏+]

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

 

C&C++ 动态二维数组

原文:https://www.cnblogs.com/taoXiang/p/12417302.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!