[英]C++ trying to read data from file into vector
我只是试图将数据从文件读入向量。 如图所示,该文件试图读取包含第一个数字(n)的节点数。 在那之后,我读了n个体重。 最后,我从邻接矩阵中获得连接。 当我编译代码时,它停止工作。
int main()
{
ifstream inFile;
string tline;
inFile.open("Problem.dat_50_50_0");
if(!inFile)
cout << "OPSS" << endl;
inFile >> tline;
inFile >> n;
for(int i = 0; i < 2 * (n + 1); i++)
inFile >> tline;
vector<vector<int> > matrix(n, vector<int>(n));
vector<list<int> > adj(n);
vector<int> weight(n);
vector<int> degree(n);
vector<string> color(n, white);
for(int i = 0; i < n; i++)
{
inFile >> weight[i];
weight.push_back(weight[i]);
}
inFile >> tline;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
inFile >> matrix[i][j];
if(i == j)
matrix[i][j] = 0;
if(matrix[i][j] == 1)
adj[i].push_back(j);
}
}
我试图打开该文件读取第一行,把这个号码到n
,然后push_back
到载体的n
第一行后第号(其表示重量图片中所示)。 读取权重后,我们进入矩阵以获取邻居。 如果matrix[i][j] == 1
,我们将j
的值放入邻接向量中。
例如,根据图片,adj向量将如下所示:
0 -> 1, 2
1 -> 0, 2, 3
2 -> 0, 1
3 -> 1
您为什么不这样写数据?: 4;12,2365,85;6,11,12,8;
拆分和解析要容易得多。
或使用name=value
列表。
希望这会有所帮助。
该块看起来是错误的:
for(int i =0; i < n ; i++){
inFile>> weight[i];
weight.push_back(weight[i]);
}
您要从inFile
中获取数字并将其放入weight[i]
,然后在下一行中,再次push_back
相同的值,但是您将在下一次迭代时将其覆盖(因为同时i
增加了)。 这意味着,如果文件中的数字为1 2 3 4
,则在每次迭代结束时将得到以下结果: 1 1
1 2 2
1 2 3 3
1 2 3 4 4
。 inFile>> weight[i];
一个人就足够了。
然后,我认为这不是阻碍您的问题,但是...
if(! inFile){
cout << "OPSS" << endl;
}
如果无法读取文件,则不仅应打印“ OPSS”,还应退出或引发异常。 无论如何,您不能只继续,因为其余代码期望文件在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.