gpt4 book ai didi

c++ - ostream 不打印添加两个 valarrays 的结果(使用运算符重载)

转载 作者:行者123 更新时间:2023-11-28 04:32:25 25 4
gpt4 key购买 nike

我仍在学习运算符重载并想使用 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+您没有设置的定义 rowcol ans 的成员对象所以改变你的代码如下

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)

条件i<mat.col*mat.rowoperator<<在第一次迭代中返回 false,这就是您没有看到任何输出的原因。

关于c++ - ostream 不打印添加两个 valarrays 的结果(使用运算符重载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com