矩阵类中的任意矩阵维

时间:2019-10-15 10:40:04

标签: c++ class matrix

任务如下:用组件数据描述类“数字矩阵”:矩阵的尺寸,指向元素的指针。重载操作:<<(矩阵输出到屏幕上),+(矩阵相加),一元¬-(更改每个元素的符号),/ =(将每个元素除以数字)。我执行了它,并正确执行了它,但是您需要通过键盘设置矩阵尺寸,并且可以看到,它是为我预先设置的[3] [3]。听起来很简单,但是我真的很蠢。在此先感谢您的帮助。这是代码:

#include "pch.h"
#include <iostream>
using namespace std;
class Matrix
{
public:
    Matrix()
    {
        int Table[3][3];
    }
    int Table[3][3];
    void Create()
    {
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                Table[i][j] = 10;
    }
};
ostream& operator <<(ostream& t, Matrix a)
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            t << a.Table[i][j] << " ";
        t << "\n";
    }
    return t;
}
Matrix& operator /=(Matrix& a, int num)
{
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            a.Table[i][j] /= num;
    return a;
}
Matrix& operator -(Matrix& a, int empty)
{
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            a.Table[i][j] = -a.Table[i][j];
    return a;
}
Matrix& operator +(Matrix& a, Matrix b)
{
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            a.Table[i][j] += b.Table[i][j];
    return a;
}
int main()
{
    int u;
    setlocale(LC_ALL, "Russian");
    Matrix Example;
    Example.Create();
    Matrix Example1;
    Example1.Create();


    cout << Example;

    cout << Example1;
    cout << "Сумма матриц: "<<endl;
    cout << Example + Example1;

                Example - 1;

                Example1 - 1;


cout<< Example + Example1;

            cout << "На сколько вы хотите её поделить?\n";
            cin >> u;

                Example /= u;

                Example1 /= u;
                cout << Example;

                cout << Example1;


}`

2 个答案:

答案 0 :(得分:0)

您需要动态创建矩阵。 为此,您需要使用指标(*)。更改int表[3] [3]     双人桌**;

如何实现它的示例(请注意,我使用矩阵而不是表格)

class Matrix {
private:
    double** matrix;
    int col;
    int row;
public:
    Matrix(){};
    void Create(int row, int col);
};


void Matrix::Create(int row_, int col_){

    double val = 0.0;
    col = col_; // initalize private members
    row = row_;

    matrix = new double*[row]; // Create a new array of size row_

    for(int i = 0; i < row; i++)
    {
        matrix[i] = new double[col]; // Create new cols of size col (inside array of row)
    }

    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            matrix[i][j] = val;
            val = val + 1.0;
        }
    }
}

为简单起见,我尝试重用您的设计,但我确实建议您尝试在构造函数中指定矩阵的尺寸,甚至可能在其中构造矩阵。 像这样:

Matrix(int row_, int col_) : row(row_), col(col_) {*/ create matrix here /*};

您可以跳过“在此处创建矩阵”部分,并根据需要使用自己的Create()。

答案 1 :(得分:0)

您需要为此动态分配内存。除非明确告知您,否则我不会摆弄指针(新建/删除)。作为初学者,您可能应该使用标准模板库(STL)工具:

std::vector<std::vector<int>> Table并使用int Table[3][3]代替Matrix(std::size_t rows, std::size_t cols) { Table.resize(rows); for (unsigned int i = 0; i < Table.size(); ++i) Table[i].resize(cols); } 。然后编写这样的构造函数:


Matrix& operator +(Matrix& a, Matrix b)
{
    unsigned int rows = a.Table.size();
    unsigned int cols = a.Table[0].size();

    for (unsigned int i = 0; i < rows; i++)
        for (unsigned int j = 0; j < cols; j++)
            a.Table[i][j] += b.Table[i][j];
    return a;
}

您还可以存储矩阵的维数,但是无需这样做,因为您可以从向量中获取信息。将所有循环中的硬编码尺寸替换为相应的动态尺寸(存储或从矢量中提取)。例如:

 <ShellContent ...
                  Route="defRoute" />

但是,此向量载体并不是真正有效。最好是单个向量,但我想对于初学者来说还可以。

问候