矩阵类c++实现


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

#include <iostream.h>

class matrix

{

public:

    matrix( int r = 2, int c = 2 );

    matrix( matrix &m );

    ~matrix();

    void set( void );

    matrix operator =( matrix &m );

    matrix operator +( matrix &m ); 

    matrix operator -( matrix &m ); 

    matrix operator *( matrix &m ); 

    double operator ()( int x, int y );

    matrix rev( void );

    friend ostream & operator <<( ostream & out, matrix &m );

private:

    int row;

    int col;

    double  **p;

};

matrix::matrix( int r, int c )

{

    int i;

    row = r;

    col = c;

    p   = new double*[row];

    for ( i = 0; i < row; i++ )

        *(p + i) = new double [col];

}

matrix::matrix( matrix &m )

{

    int i, j;

    row = m.row;

    col = m.col;

    p   = new double*[row];

    for ( i = 0; i < row; i++ )

        *(p + i) = new double [col];

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            *(*(p + i) + j) = *(*(m.p + i) + j);

}

matrix::~matrix()

{

    int i;

    for ( i = 0; i < row; i++ )

        delete[]*(p + i);

    delete[]p;

}

void matrix::set( void )

{

    int i, j;

    cout << "??????????????:" << endl;

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            cin >> *(*(p + i) + j);

}

matrix matrix::operator =( matrix &m )

{

    int i, j;

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            *(*(p + i) + j) = *(*(m.p + i) + j);

    return(*this);

}

matrix matrix:: operator +( matrix &m )

{

    int i, j;

    matrix  a( row, col );

    if ( row != m.row || col != m.col )

        throw 0;

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            *(*(a.p + i) + j) = *(*(p + i) + j) + *(*(m.p + i) + j);

    return(a);

}

matrix matrix::operator -( matrix &m )

{

    int i, j;

    matrix  a( row, col );

    if ( row != m.row || col != m.col )

        throw 0;

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            *(*(a.p + i) + j) = *(*(p + i) + j) - *(*(m.p + i) + j);

    return(a);

}

matrix matrix::operator *( matrix &m )

{

    if ( col != m.row )     

        throw 0;       

    int i, j, k;

    double  sum;

    matrix  a( row, m.col );

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < m.col; j++ )

        {

            for ( k = 0, sum = 0; k < col; k++ )

                sum = sum + *(*(p + i) + k) * *(*(m.p + k) + j);

            *(*(a.p + i) + j) = sum;

        }

    return(a);

}

double matrix::operator ()( int x, int y )

{

    if ( x > row || y > col )      

        throw 0.0;             

    return(*(*(p + x - 1) + y - 1) );

}

matrix matrix::rev( void )             

{

    int i, j;

    matrix  a( col, row );

    for ( i = 0; i < row; i++ )

        for ( j = 0; j < col; j++ )

            *(*(a.p + j) + i) = *(*(p + i) + j);

    return(a);

}

ostream & operator <<( ostream & out, matrix &m )

{

    int i, j;

    for ( i = 0; i < m.row; i++ )

    {

        for ( j = 0; j < m.col; j++ )

            out << *(*(m.p + i) + j) << " ";

        out << endl;

    }

    return(out);

}

int main()

{

    matrix a( 2, 3 ), b( 3, 2 );

    a.set();

    b = a.rev();

    cout << "????a:" << endl;

    cout << a;

    cout << "????a??????b:" << endl;

    cout << b;

    return(0);

}

来源: http://tool.oschina.net/highlight

时间: 2024-11-08 02:43:00

矩阵类c++实现的相关文章

矩阵类(基本)

以下为矩阵类 1 namespace KUNKUN_MATRIX{ 2 const int MOD = 1000000007; 3 template<class E> 4 class Matrix{ 5 public: 6 Matrix(size_t _m,size_t _n); 7 Matrix(const Matrix& copy); 8 Matrix operator*(const Matrix &b); 9 E* operator[](size_t i); 10 Mat

矩阵类的python实现

科学计算离不开矩阵的运算.当然,python已经有非常好的现成的库:numpy. 我写这个矩阵类,并不是打算重新造一个轮子,只是作为一个练习,记录在此. 注:这个类的函数还没全部实现,慢慢在完善吧. 全部代码: 1 import copy 2 3 class Matrix: 4 '''矩阵类''' 5 def __init__(self, row, column, fill=0.0): 6 self.shape = (row, column) 7 self.row = row 8 self.co

矩阵及其运算(一):创建一个矩阵类

在VB.NET中可以通过一个数组(Array)来简单表示矩阵,为实现更多功能也可以用类(Class)来表示. 矩阵的数学定义:由m*n个数排成的m行n列的数表 Public Class Matrix Private TableData(,) As Double Private RowLength, ColLength As Integer '矩阵的行长度 Public ReadOnly Property Row() Get Return RowLength End Get End Propert

[Android] 使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度处理

    前一篇文章讲述了Android拍照.截图.保存并显示在ImageView控件中,该篇文章继续讲述Android图像处理技术,主要操作包括:通过打开相册里的图片,使用Matrix对图像进行缩放.旋转.移动.对比度.亮度.饱和度操作,希望对大家有所帮助. 一. 显示打开图片     首先,设置activity_main.xml布局如下所示: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android

实用矩阵类(Matrix)(带测试)

引言: 无意间看到国外一个网站写的Matrix类,实现了加减乘除基本运算以及各自的const版本等等,功能还算比较完善,,于是记录下来,以备后用: 1 #ifndef MATRIX_H 2 #define MATRIX_H 3 4 #include <iostream> 5 #include <functional> 6 #include <algorithm> 7 8 using namespace std; 9 10 template <size_t Rows

泛型矩阵类

1.GenericMatrix类 public abstract class GenericMatrix<E extends Number> { /** * Abstract method for adding two elements of the matrices * @param o1 * @param o2 * @return */ protected abstract E add(E o1, E o2); /** * Abstract method for myltiplying t

OpenCV中Rect矩阵类

成员变量x.y.width.height,分别为左上角点的坐标和矩形的宽和高. 常用的成员函数有: Size()返回值为一个Size area()返回矩形的面积 contains(Point)用来判断点是否在矩形内 inside(Rect)函数判断矩形是否在该矩形内 tl()返回左上角点坐标 br()返回右下角点坐标. // 移动矩阵 Rect rectShift = rect + point; // 缩放矩阵 Rect rectScale = rect + size; // 求两矩阵交集和并集

矩阵类的代码(C++)

The Codes of Matrix Class Matrix.h:#ifndef MATRIX_H#define MATRIX_H #include<iostream> #include<iomanip> #include<cassert> #include<cmath> #include"MatrixTypedef.h"// declare typedef's header file class Matrix{ public: Ma

Young氏矩阵类C++实现代码 算法导论6.3

个人总结: 1.int **p和 int a[M][N]之间的区别: 1) int **指向指针的指针:而后者的类型是数组名,类型为 int (*)[N],即指向的是整个一行. 2) (a+1) 表示地址增加M*sizeof(int),需要注意的一点是a[i]是第i行开头的地址,&a和a的值是一样的.数组名是附带大小属性的,而指针是一个存储了地址的变量.特意去看了一下声明数组的汇编代码,其中一条指令是mov %gs:0x14,%eax  (数组大小20即0x14),最后也貌似也会检查一下数组是否

矩阵类

class MatrixBase{ int rows, cols;public: MatrixBase(int the_rows, int the_cols) :rows(the_rows), cols(the_cols){} int GetRows()const { return rows; } int GetCols()const { return cols; } virtual double getElement(int r, int c)const = 0; void show() {