矩阵操作(更新使用class重新编写)
来源:互联网 发布:清华社会科学学院 知乎 编辑:程序博客网 时间:2024/05/17 08:12
矩阵的简单操作
/* * matrix.cpp * * Created on: Apr 9, 2014 * Author: qinf */#include <iostream>#include <stdexcept>using std::cin;using std::cout;using std::endl;struct Matrix {int **data;int row;int col;//initvoid init_array(int row, int col) {int i, j;this->row = row;this->col = col;//c++不能直接定义二维数组data = new int*[row];for (int i = 0; i != row; ++i)data[i] = new int[col];for (i = 0; i != row; ++i) {for (j = 0; j != col; ++j)data[i][j] = 0;}}//destoryvoid destroy_array() {int i = 0;for (; i != row; ++i)delete[] data[i];}//mulvoid mul_array(int x) {int i, j;for (i = 0; i != row; ++i) {for (j = 0; j != col; ++j)data[i][j] = data[i][j] * x;}}//printvoid print() {int i, j;for (i = 0; i != row; ++i) {for (j = 0; j != col; ++j)cout << data[i][j] << " ";cout << endl;}}//矩阵相加void add_array(Matrix *B, Matrix *C) {int new_row = row;int new_col = B->col;C->row = new_row;C->col = new_col;C->init_array(new_row, new_col);int i, j, k, tmp;for (i = 0; i != new_col; ++i) {for (j = 0; j != new_row; ++j) {tmp = 0;for (k = 0; k != this->col; ++k)tmp += data[i][k] + B->data[k][j];C->data[i][j] = tmp;}}}//矩阵相乘void mul_array(Matrix *B, Matrix *C) {if (this->col != B->row)throw std::runtime_error("error");if (this->row != C->row || B->col != C->col)throw std::runtime_error("error");int i, j, k, tmp;for (i = 0; i != this->row; ++i) {for (j = 0; j != B->col; ++j) {tmp = 0;for (k = 0; k != this->col; ++k)tmp += data[i][k] * B->data[k][j];C->data[i][j] = tmp;}}}};int main(int argc, char *argv[]) {Matrix a, b, c;a.row = 2;a.col = 2;a.init_array(2, 2);c.row = 2;c.col = 3;c.init_array(2, 3);int i, j;for (i = 0; i != a.row; ++i)for (j = 0; j != a.col; ++j)a.data[i][j] = 1;a.print();//b.row = 2;//b.col = 3;//b.init_array(2, 3);b.row = b.col = 2;b.init_array(2, 2);for (i = 0; i != b.row; ++i)for (j = 0; j != b.col; ++j)b.data[i][j] = 1;//a.mul_array(2);//a.mul_array(&b, &c);a.add_array(&b, &c);c.print();return 0;}
/* * Matrix.h * * Created on: Apr 11, 2014 * Author: qinf */#ifndef MATRIX_H_#define MATRIX_H_#include <iostream>#include <stdexcept>class Matrix {public:Matrix(int row, int col);void add(Matrix B, Matrix &C);void mul_array(int x);void mul_array(Matrix &B, Matrix &C);void print();void set_value(int *data, int m, int n);~Matrix();private:int _row;int _col;int **_data;};#endif /* MATRIX_H_ */
/* * Matrix.cpp * * Created on: Apr 11, 2014 * Author: qinf */#include "Matrix.h"Matrix::Matrix(int row, int col) :_row(0), _col(0) {// TODO Auto-generated constructor stub//c++不能直接定义二维数组_row = row;_col = col;_data = new int*[_row];for (int i = 0; i != row; ++i) {_data[i] = new int[_col];}for (int i = 0; i != _row; ++i) {for (int j = 0; j != _col; ++j)_data[i][j] = 0;}}void Matrix::set_value(int *data, int m, int n) {for (int i = 0; i != m; ++i) {for (int j = 0; j != n; ++j)_data[i][j] = *(data + n * i + j);}}void Matrix::add(Matrix B, Matrix &C) {if (_row != B._row || _row != C._row || B._row != C._row) {throw std::runtime_error("row's value not equal");}if (_col != B._col || _col != C._col || B._col != C._col) {throw std::runtime_error("col's value not equal");}for (int i = 0; i != _row; ++i) {for (int j = 0; j != _col; ++j) {C._data[i][j] = _data[i][j] + C._data[i][j];}}}void Matrix::mul_array(int x) {for (int i = 0; i != _row; ++i) {for (int j = 0; j != _col; ++j) {_data[i][j] = _data[i][j] * x;}}}void Matrix::mul_array(Matrix &B, Matrix &C) {if (_row != C._row || _col != B._row || B._col != C._col)throw std::runtime_error("matrix not match");for (int i = 0; i != _row; ++i) {for (int j = 0; j != C._col; ++j) {int tmp = 0;for (int k = 0; k != _col; ++k)tmp += _data[i][k] * B._data[k][j];C._data[i][j] = tmp;}}}void Matrix::print() {for (int i = 0; i != _row; ++i)for (int j = 0; j != _col; ++j) {if (j != _col - 1)std::cout << _data[i][j] << " ";elsestd::cout << _data[i][j] << std::endl;}}Matrix::~Matrix() {for (int i = 0; i != _row; ++i)delete[] _data[i];}
0 0
- 矩阵操作(更新使用class重新编写)
- 由编写矩阵class想到的
- 使用C++编写类似MFC的CString,部分功能,重新复习使用操作符重载
- C#编写有关矩阵的操作
- c++编写xml操作类(更新)
- 一元二次方程求解 使用c++ class编写
- SAP FI FAGLFLEXT/FAGLFLEXA 数据不正确重新更新操作
- SAP FI FAGLFLEXT/FAGLFLEXA 数据不正确重新更新操作
- 矩阵的使用与操作
- 使用OpenCV完成矩阵操作
- Quartz2D使用(矩阵操作)
- 更新Java final常量后,请重新编译你的class
- 更新Java final常量后,class不能重新编译的问题
- 使用VC++6.0重新编写数据库备份程序
- 编写组件,使用JavaScript更新UpdatePanel (转载)
- 编写组件,使用JavaScript更新UpdatePaneljavascript
- Mat类编写矩阵乘法和加法操作
- 重新发现矩阵
- chapter05—Channel Allocation(POJ 1129)
- XCode5添加新建类模板(Cocos2dx Template Class for Scene or Layer)
- java中引用数据类型的传递
- 在win7下安装ubuntu成功后开机没有启动项
- Linux下中文字符乱码的问题
- 矩阵操作(更新使用class重新编写)
- poj-1659-Frogs' Neighborhood-havel定理
- 常见HTTP状态
- 社会工程学之信息刺探
- eclipse中的快捷键
- Blu-ray光盘
- android(cordova)最新版本3.4.0依赖包
- iOS study Day17-沙盒数据库(sqlite)的增删改查
- AVR Studio6.x 软件仿真 延时函数 有问题