c++ - 稀疏矩阵构造函数不在对象中存储参数
问题描述
我想存储从文件中读取的稀疏矩阵,但是当构造函数完成时,参数不会存储在对象中。
该文件具有“行列”结构,其中行是矩阵行,列是矩阵列。如果文件的坐标存在,则在该位置存储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;
解决方案
您的构造函数不会在类中存储任何内容,除非m_Ncolumnes
您m_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;
}
推荐阅读
- node.js - 如果 API 得到更新,我如何向我的应用用户发送 Firebase 通知?
- react-native - React Native 中不受 KeyboardAwareScrollView 影响的垂直居中图像
- r - 使用 R 通过图标可视化数量
- jenkins - 如何在cps脚本jenkins中获取变量?
- qemu - RISC-V:切换到管理员模式时出现非法指令异常
- python - BeautifulSoup 限制为两位小数,以 0.00 开头的整数结果为“0.0”
- opencl - 奇怪的 OpenCL 行为
- reactjs - 从 firestore 读取数据未定义
- reactjs - react-boilerplate 代码库的生产部署抛出错误并显示空白页
- python - 检查已运行进程的状态