我一直在用矩阵编写一个简短的程序,作为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具有四个元素的数组。
答案 0 :(得分:0)
pm.wsk = new int [pm.size*pm.size];
这种形式的operator new不会初始化数组元素。这个确实:
pm.wsk = new int [pm.size*pm.size]();
由于您正在更新pm.wsk
的元素而不是在内部循环中使用累加器变量,因此您需要预先初始化pm.wsk
的元素。