[英]Adding Sparse Matrices
对于我们的编程类,我们必须通过读取2个输入文件将两个稀疏矩阵加在一起。 我们需要使用结构来存储矩阵中的值,并为元素的大小动态分配大小。 我了解为矩阵大小分配内存,然后读取输入矩阵文件的每一行以查找行(int r;),列(int c;)和该特定值(双精度值)> I的逻辑。请注意,只有在矩阵中具有相同位置的值才会相加。 但是,我正在努力从语法的角度来解决这个问题。 这是我到目前为止的内容,以及示例输入文件。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int size1 = 100;
int size2 = 100;
struct element
{
int r;
int c;
double value;
};
int main()
{
ifstream inputfile;
inputfile.open("TextFile1.txt");
string line;
char ch;
int i = 0;
int r;
int c;
double value;
for (i = 0; i <= 0; i++)
{
getline(inputfile, line);
inputfile >> r >> c;
}
size1 = (r + 1) * (c + 1);
while (getline(inputfile, line))
{
inputfile >> r >> c >> value;
cout << r << c << value << endl;
}
element m1[10];
{
m1[0].r = r;
m1[1].c = c;
m1[2].value = value;
}
cout << m1[0].r << m1[1].c << m1[2].value << endl;
system("pause");
return 0;
}
输入文件:
#Matrix A
2 2
1 1 2.2
2 2 3
到目前为止,这只存储了矩阵的最后一行的int r,int c和double值,我感到困惑,为什么它跳过了第一行(1 2.2)? 我也很难弄清楚如何为矩阵文件中的每一行创建一个单独的结构。 如果不为我做这些工作,谁能给我一些提示,说明我应该如何存储输入文件中的信息,以及如何将其转换为必须在同一位置查找要添加的值?
更新:由于我的for循环,我仍然遇到问题。 我试图做的是跳过包含“#”的行,但是如果说“#”在代码中的其他位置,则该代码将无法工作。 (对于提供给我们的示例输入,在代码中随机嵌入了一些“#”,如果有的话,我们必须找到一种跳过该行的方法)
while (getline(inputfile, line))
{
inputfile >> r >> c >> value;
cout << r << c << value << endl;
}
这将从文件中读取每一行...然后对其不执行任何操作。 在循环结束时,这些变量将保留其读取的最后一行中的值。
然后,您可以获取这些变量中剩余的内容并将其粘贴到元素数组中。
你需要更新你所循环的元件排列,而不是之后。 除非您将变量放在某个位置,否则该程序将不会记住您的变量!
您可能想要类似的东西:
int line = 0;
element m1[10];
while (inputfile >> r >> c >> value)
{
cout << r << c << value << endl;
m1[line].r = r;
m1[line].c = c;
m1[line].value = value;
line++;
}
我很困惑为什么它跳过第一行(1 1 2.2)? 此代码不会跳过第一行(1 1 2.2)。 以我的理解,第一行2 2告诉我们稀疏矩阵的维数(3 * 3)。 下一部分是稀疏矩阵中的元素值(行,列,值)。 我建议您使用vector(vector <element>)解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.