利用二维指针开辟空间形成二维数组;

原题为设计一个Matrix类,实现基本的矩阵运算;

初次设计为HL[10][10]数组,存放矩阵元素,后改为二维指针;

主要问题存在于二维指针理解的不透彻,无法理解其开辟空间的方法;

  1. HL = new double *[row];
  2. for(i = 0;i < row;i++)
  3. HL[i] = new double [list];
  4.  
  5. 其次对于不同类型矩阵相加没有找到合适的处理方式,只能手动控制不使不同类型矩阵相加或相减;
    其中 row 为行,list为列,HL为存放矩阵的二维指针;
  6.  
  7. 附上一个new运算符的用法;
  8.  
  9. https://www.cnblogs.com/2015-16/p/11782595.html
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class Matrix
  5. {
  6. private:
  7. int row,list;
  8. double **HL;
  9. public:
  10. Matrix(int r_ = , int l_ = );
  11. Matrix(int r_ , int l_ , double **newone);
  12. Matrix(const Matrix & rhs);
  13. ~Matrix();
  14. Matrix operator + (const Matrix & rhs);
  15. Matrix operator - (const Matrix & rhs);
  16. Matrix operator = (const Matrix & rhs);
  17. friend ostream & operator << (ostream & os , const Matrix & rhs);
  18. };
  19.  
  20. int i,j;
  21.  
  22. Matrix::Matrix(int r_ , int l_):row(r_),list(l_)  //构造函数
  23. {
  24. HL = new double *[row];
  25. for(i = ;i < row;i++)
  26. HL[i] = new double [list];
  27. cout<<"please enter Matrix :"<<endl;
  28. for(i = ;i < row;i++)
  29. for(j = ;j < list;j++)
  30. cin>>HL[i][j];
  31. }
  32.  
  33. Matrix::Matrix(int r_ , int l_ , double **newone ):row(r_),list(l_)  //构造函数重载,主要用于加法减法中的return使用
  34. {
  35. HL = new double *[row];
  36. for(i = ;i < row;i++)
  37. HL[i] = new double [list];
  38. for(i = ;i < row;i++)
  39. for(j = ;j < list;j++)
  40. HL[i][j] = newone[i][j];
  41. }
  42.  
  43. Matrix::Matrix(const Matrix & rhs)
  44. {
  45. if(this != & rhs)
  46. {
  47. this->row = rhs.row;
  48. this->list = rhs.list;
  49. HL = new double *[row];
  50. for(i = ;i < row;i++)
  51. HL[i] = new double [list];
  52. for(i = ;i < row;i++)
  53. for(j = ;j < list;j++)
  54. this->HL[i][j] = rhs.HL[i][j];
  55. }
  56. }
  57.  
  58. Matrix::~Matrix()    // 析构函数,删除开辟的空间
  59. {
  60. cout<<"~ Matrix : row ="<<row<<" , list = "<<list<<endl<<endl;
  61. for(i = ;i < row;i++)
  62. delete [] HL[i];
  63. delete [] HL;
  64. }
  65.  
  66. Matrix Matrix::operator + (const Matrix & rhs)
  67. {
  68. if( (this->row == rhs.row)&&(this->list == rhs.list) )
  69. {
  70. double **newone;
  71. int r_,l_;
  72. r_ = row;l_ = list;
  73. newone = new double *[row];
  74. for(i = ;i < row;i++)
  75. newone[i] = new double [list];
  76. for(i = ;i < row;i++)
  77. for(j = ;j < list;j++)
  78. newone[i][j] = HL[i][j] + rhs.HL[i][j];
  79. return Matrix(r_,l_,newone);
  80. }
  81. // else
  82. // cout<<"error ——矩阵类型不符 "<<endl;
  83. }
  84.  
  85. Matrix Matrix::operator - (const Matrix & rhs)
  86. {
  87. if( (this->row == rhs.row)&&(this->list == rhs.list) )
  88. {
  89. double **newone;
  90. int r_,l_;
  91. r_ = row;l_ = list;
  92. newone = new double *[row];
  93. for(i = ;i < row;i++)
  94. newone[i] = new double [list];
  95. for(i = ;i < row;i++)
  96. for(j = ;j < list;j++)
  97. newone[i][j] = HL[i][j] - rhs.HL[i][j];
  98. return Matrix(r_,l_,newone);
  99. }
  100. // else
  101. // cout<<"error ——矩阵类型不符 "<<endl;
  102. }
  103.  
  104. Matrix Matrix::operator = (const Matrix & rhs)
  105. {
  106. if((this->row == rhs.row)&&(this->list == rhs.list))
  107. {
  108. for(i = ;i < row;i++)
  109. for(j = ;j < list;j++)
  110. this->HL[i][j] = rhs.HL[i][j];
  111. return (*this);
  112. }
  113. // else
  114. // cout<<"error ——矩阵类型不符 "<<endl;
  115. }
  116.  
  117. ostream & operator << (ostream & os,const Matrix & rhs)
  118. {
  119. os<<"Matrix : row ="<<rhs.row<<" , list = "<<rhs.list<<endl;
  120. for(i = ;i < rhs.row;i++)
  121. {
  122. for(j = ;j < rhs.list;j++)
  123. os<<rhs.HL[i][j]<<" ";
  124. os<<endl;
  125. }
  126. return os;
  127. }
  128.  
  129. int main()
  130. {
  131. int m,n,x,y;
  132. cin>>n>>m>>x>>y;
  133. Matrix aa(n,m),bb(n,m),cc(n,m),dd(x,y);
  134. cout<<endl<<aa<<endl<<bb<<endl<<cc<<endl<<dd<<endl;
  135. cout<<(aa+bb+cc)<<endl<<(cc-bb)<<endl;
  136. return ;
  137. }

2019-11-02    15:34:51

C++中Matrix(矩阵)的基本运算( +、-、=、<<)的更多相关文章

  1. 【CSS3】 理解CSS3 transform中的Matrix(矩阵)

    理解CSS3 transform中的Matrix(矩阵) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu ...

  2. 理解CSS3 transform中的Matrix(矩阵)

    一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵) ...

  3. 理解CSS3 transform中的Matrix(矩阵)——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2427 一.哥,我被你 ...

  4. css3 transform中的matrix矩阵

    CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示 ...

  5. CSS3中的矩阵

    CSS3中的矩阵 CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3,如下面矩阵示 ...

  6. 前端matrix矩阵的变化

    css3 transform中的matrix矩阵   CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform), ...

  7. [转]numpy中的matrix矩阵处理

    今天看文档发现numpy并不推荐使用matrix类型.主要是因为array才是numpy的标准类型,并且基本上各种函数都有队array类型的处理,而matrix只是一部分支持而已. 这个转载还是先放着 ...

  8. numpy中的matrix矩阵处理

    numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...

  9. Android中的Matrix(矩阵)

    写在前面 看这篇笔记之前先看一下参考文章,这篇笔记没有系统的讲述矩阵和代码的东西,参考文章写的也有错误的地方,要辨证的看. 如何计算矩阵乘法 android matrix 最全方法详解与进阶(完整篇) ...

随机推荐

  1. 远程唤醒、WOL、Magic_Packet【转】

    转自:https://www.cnblogs.com/zhuimengle/p/5898830.html 原文:http://blog.csdn.net/flyoxs/article/details/ ...

  2. linux的initcall机制

    linux的initcall机制(针对编译进内核的驱动) initcall机制的由来 我们都知道,linux对驱动程序提供静态编译进内核和动态加载两种方式,当我们试图将一个驱动程序编译进内核时,开发者 ...

  3. NCcat学习使用

    一.使用手册 1.简介:nc/NetCat是一款端口监听工具,可以用来建立系统之间的连接.传输文件.TCP代理等. 2.命令参数     nc [-options] hostname port[s] ...

  4. 第13节-BLE协议L2CAP层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Proto ...

  5. 使用Windows api 获得系统时间并生成文件夹

    // 使用window api 获得系统时间 // 生成 #include "stdafx.h" #include <Windows.h> #include <d ...

  6. day45 作业

    一.将当前日期按"2017-12-27 11:11 星期三"格式输出 function getdate(){ var d = new Date(); year = d.getFul ...

  7. VNC远程登陆树莓派3(包括开机启动)

    在树莓派上安装VNC需要使用命令行.如果需要远程操作安装VNC,就必须通过SSH登录到命令行界面(Raspbian的默认用户名是:pi,默认密码是:raspberry). 安装 命令行输入: sudo ...

  8. vmware centos 桥接模式 联网记录

    参考这篇文章 https://www.cnblogs.com/jasmine-Jobs/p/5928218.html 记得要修改/etc/sysconfig/network文件的网关配置,因为ip变动 ...

  9. Apex 中插入更新数据的事件执行顺序

    在使用 Apex 代码插入或更新数据的时候,若干事件会被按顺序执行.了解这些顺序可以提高调试程序的效率,也可以避免不必要的错误. 可以参考官方文档. 事件的执行顺序 从数据库中读取要更新的数据记录或初 ...

  10. 清北学堂(2019 5 2) part 5

    今天讲图论,顺便搞一搞之前没弄完的前向星dij 1.图的基本概念(课件原话): G (图)= (V(点); E(边)) 一般来说,图的存储难度主要在记录边的信息 无向图的存储中,只需要将一条无向边拆成 ...