首页 > 解决方案 > 稀疏矩阵构造函数不在对象中存储参数

问题描述

我想存储从文件中读取的稀疏矩阵,但是当构造函数完成时,参数不会存储在对象中。

该文件具有“行列”结构,其中行是矩阵行,列是矩阵列。如果文件的坐标存在,则在该位置存储1,否则存储0。

这是构造函数:

MatriuSparse::MatriuSparse(const string nomFitxer) {
        fstream fitxer;
        fitxer.open(nomFitxer);

        int m_columna;
        int m_fila;
        m_Ncolumnes = 8;
        m_Nlinies = 8;
        vector<vector<int> > matriu;
        for (int i = 0; i < m_Nlinies; i++)
        {
            vector<int> temporal;
            for (int j = 0; j < m_Ncolumnes; j++) {
                temporal.push_back(0);
            }
            matriu.push_back(temporal);
        }
        fitxer >> m_fila >> m_columna;

        while (!fitxer.eof())
        {
            matriu[m_fila][m_columna] = 1;
            fitxer >> m_fila >> m_columna;
        }
        fitxer.close();
        //Here matrix has size 8
    }

这是主要的:

 string nomFitxer = "Xarxa1.txt";
    MatriuSparse m1(nomFitxer);
    // Here m1 matrix has size 0
    cout << m1;

标签: c++classsparse-matrixadjacency-matrix2d-vector

解决方案


您的构造函数不会在类中存储任何内容,除非m_Ncolumnesm_Nlinies设置为常量值。其他所有内容都存储在构造函数的本地变量中,一旦构造函数完成,这些变量就会消失。

您很可能隐藏了同名的成员向量。只需删除此行:

    vector<vector<int> > matriu;   // hiding the member matriu ? 

不相关 1:您可以在没有嵌套循环的情况下轻松初始化向量:

    matriu = vector<vector<int>>(m_Nlinies, vector<int>(m_Ncolumnes, 0));

不相关 2:循环eof()无法正常工作。您必须循环提取。因此,一旦您的矩阵初始化,只需执行以下操作:

    while (fitxer >> m_fila >> m_columna)
    {
        matriu[m_fila][m_columna] = 1;
    }

推荐阅读