1. 程式人生 > 其它 >【轉】c++用vector製作矩陣

【轉】c++用vector製作矩陣

class Matrix//矩陣類
{
public:
    vector<vector<double>>data;
    int rows;//行數
    int columns;//列數
    Matrix(int rowNum,int columnNum)//初始化建構函式
    {
        rows = rowNum;
        columns = columnNum;
        data.resize(rows);
        for (int i = 0; i < rows; i++)
        {
            data[i].resize(columns,
0); } } Matrix() { rows = 0; columns = 0; } vector<double>&operator[](int i)//返回第i行的引用 { return data[i]; } Matrix operator*(Matrix&B)//矩陣乘法 B的引用 { int BColumns = B.columns; Matrix C(rows, BColumns); for
(int i = 0; i < rows; i++) { for (int j = 0; j < BColumns; j++) { for (int k = 0; k < columns; k++) { C[i][j] += data[i][k] * B[k][j]; } } } return C; } Matrix sub(
int i,int j)//返回餘矩陣 { Matrix C(rows-1,columns-1); int r = -1;// 記住sub的行和列 int c = -1; for (int x = 0; x < rows; x++) { if (x != i) { ++r; for (int y = 0; y < columns; y++) { if (y != j) { ++c; C[r][c] = data[x][y]; } } } } return C; } double det()//求行列式(遞迴定義的遞迴求) { if (rows == 1 && columns == 1) { return data[0][0]; } else { double value = 0; for (int j = 0; j < columns; j++) { value += pow(-1, j + 2) * data[0][j] * (*this).sub(0, j).det(); } return value; } } Matrix inverse() { Matrix C(rows, columns); double d = this->det();//行列式的值 for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { C[i][j] = pow(-1, i + j + 2) * (*this).sub(j, i).det(); C[i][j] /= d; } } return C; } void Print()//列印矩陣 { for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { printf("%.2f ", data[i][j]); } printf("\n"); } } void GetData()//獲得矩陣資料 { for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { cin >> data[i][j]; } } } };

原文:https://blog.csdn.net/beyondzty/article/details/120776327