C ++ - 一维数组上的矩阵乘法

时间:2017-03-26 15:28:08

标签: c++ arrays matrix

我一直在用矩阵编写一个简短的程序,作为C ++课程的一部分 - 这就是我必须以一维数组的形式编写多个矩阵的原因。

那是班级:

class macierz{
    int *wsk;
    int size;

这就是我遇到的特殊功能:

macierz operator*(macierz &a)
            {
                macierz pm;
                if (size!=a.size)
                    return pm;
                else
                    {
                    pm.size = size;
                    pm.wsk = new int [pm.size*pm.size];
                    for (int i = 0; i<pm.size; i++)
                        for (int j = 0; j<pm.size; j++)
                            for (int h = 0; h<pm.size; h++)
                                pm.wsk[j+pm.size*i] = pm.wsk[j+pm.size*i] + wsk[h+pm.size*i] * a.wsk[h*pm.size+j];
                    return pm;
                    }
            }

它编译,但是当输入是两个2x2矩阵时,结果的第一个和第三个元素是错误的(随机的6位数字),所以我认为它可能是错误的索引,我无法确定。< / p>

如果它是别的东西,你想在这里编译它是运算符&lt;&lt;和&gt;&gt;:

macierz()
    {

        wsk = NULL;
        size = 0;
    }

~macierz()
    {
        if (wsk!=0)
            {delete []wsk;
            wsk = NULL;}
    }

friend ostream & operator<<(ostream &s, macierz &o1)
        {
            for (int i=0; i<(o1.size*o1.size); i++)
                s<<o1.wsk[i]<<endl;
                s<<endl;
            return s;
        }

friend istream & operator>>(istream &s, macierz &o1)
        {
            o1.~macierz();
            s>>o1.size;
            o1.wsk = new int[o1.size*o1.size];
            for (int i=0; i<(o1.size*o1.size); i++)
                    s>>o1.wsk[i];
            return s;
        }

编辑:因为它有点混乱 - 属性大小是矩阵中的行/列数(程序只适用于方形矩阵)。因此,size = 2的mtarix具有四个元素的数组。

1 个答案:

答案 0 :(得分:0)

pm.wsk = new int [pm.size*pm.size];

这种形式的operator new不会初始化数组元素。这个确实:

pm.wsk = new int [pm.size*pm.size]();

由于您正在更新pm.wsk的元素而不是在内部循环中使用累加器变量,因此您需要预先初始化pm.wsk的元素。