ostream 不打印添加两个 valarrays 的结果(使用运算符重载)
ostream not printing the result of adding two valarrays (using operator overloading)
我仍在学习运算符重载并想使用 valarrays 添加两个矩阵,但是当我打印它们的添加时没有任何反应,所以这是代码。
// A structure to store a matrix
struct matrix
{
valarray<int> data; //valarray that will simulate matrix
int row, col;
};
matrix operator+(matrix mat1, matrix mat2);
int main() {
int data1 [] = {1, 2, 3, 4, 5, 6, 7, 8};
int data2 [] = {13, 233, 3, 4, 5, 6, 7, 8};
matrix mat1, mat2,ans;
createMatrix(4, 2, data1, mat1);
createMatrix(4, 2, data2, mat2);
cout << mat1 + mat2;
return 0;
}
//Creating the matrix
void createMatrix(int row, int col, int num[], matrix& mat) {
mat.row = row;
mat.col = col;
mat.data.resize (row * col);
for (int i = 0; i < row * col; i++)
mat.data [i] = num [i];
}
ostream& operator<<(ostream& out, matrix mat) {
for (int i = 0; i < mat.col * mat.row; ++i) {
out << mat.data[i] << " ";
if ((i + 1) % mat.col == 0)
cout << endl;
}
return out;
}
// Adding them
matrix operator+(matrix mat1, matrix mat2) {
matrix ans;
ans.data.resize(mat1.row * mat1.col);
for(int i = 0; i < mat1.row * mat1.col; ++i)
ans.data[i] = (mat1.data[i] + mat2.data[i]);
return ans;
}
似乎没有错误,但是当我 运行 它没有打印任何内容。
在 operator+
定义中,您没有为 ans
对象设置 row
和 col
成员,因此按如下方式更改您的代码
matrix operator+(matrix mat1, matrix mat2)
{
matrix ans;
ans.data.resize(mat1.row*mat1.col);
ans.row = mat1.row; // <---
ans.col = mat1.col; // <---
for(int i=0;i<mat1.row*mat1.col;++i)
{
ans.data[i]=(mat1.data[i]+mat2.data[i]);
}
return ans;
}
如果不设置这些成员,它们的值是不确定的,可能
for(int i=0;i<mat.col*mat.row;++i)
condition i<mat.col*mat.row
in operator<<
returns false 在第一次迭代中,这就是为什么你没有看到任何输出。
我仍在学习运算符重载并想使用 valarrays 添加两个矩阵,但是当我打印它们的添加时没有任何反应,所以这是代码。
// A structure to store a matrix
struct matrix
{
valarray<int> data; //valarray that will simulate matrix
int row, col;
};
matrix operator+(matrix mat1, matrix mat2);
int main() {
int data1 [] = {1, 2, 3, 4, 5, 6, 7, 8};
int data2 [] = {13, 233, 3, 4, 5, 6, 7, 8};
matrix mat1, mat2,ans;
createMatrix(4, 2, data1, mat1);
createMatrix(4, 2, data2, mat2);
cout << mat1 + mat2;
return 0;
}
//Creating the matrix
void createMatrix(int row, int col, int num[], matrix& mat) {
mat.row = row;
mat.col = col;
mat.data.resize (row * col);
for (int i = 0; i < row * col; i++)
mat.data [i] = num [i];
}
ostream& operator<<(ostream& out, matrix mat) {
for (int i = 0; i < mat.col * mat.row; ++i) {
out << mat.data[i] << " ";
if ((i + 1) % mat.col == 0)
cout << endl;
}
return out;
}
// Adding them
matrix operator+(matrix mat1, matrix mat2) {
matrix ans;
ans.data.resize(mat1.row * mat1.col);
for(int i = 0; i < mat1.row * mat1.col; ++i)
ans.data[i] = (mat1.data[i] + mat2.data[i]);
return ans;
}
似乎没有错误,但是当我 运行 它没有打印任何内容。
在 operator+
定义中,您没有为 ans
对象设置 row
和 col
成员,因此按如下方式更改您的代码
matrix operator+(matrix mat1, matrix mat2)
{
matrix ans;
ans.data.resize(mat1.row*mat1.col);
ans.row = mat1.row; // <---
ans.col = mat1.col; // <---
for(int i=0;i<mat1.row*mat1.col;++i)
{
ans.data[i]=(mat1.data[i]+mat2.data[i]);
}
return ans;
}
如果不设置这些成员,它们的值是不确定的,可能
for(int i=0;i<mat.col*mat.row;++i)
condition i<mat.col*mat.row
in operator<<
returns false 在第一次迭代中,这就是为什么你没有看到任何输出。