繁体   English   中英

C ++尝试将文件中的数据读取到向量中

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

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