繁体   English   中英

添加稀疏矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM