C ++试图将文件中的数据读入矢量

时间:2015-05-06 21:18:31

标签: c++ 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

2 个答案:

答案 0 :(得分:1)

为什么不写这样的数据?:public class MazePanel extends JPanel { private Maze maze = new Maze(); //so I can paint the maze private MazeModel model; private Player p; private Enemy e = new Enemy(); private Entity ent; public MazePanel(MazeModel model){ //constructor p = new Player(model); p.setPlayerStart(50, 50); //sets the player's starting coordinates setPreferredSize(new Dimension(500, 500)); //map size setBackground(Color.DARK_GRAY); //ground color } public void paintComponent(Graphics g){ super.paintComponent(g); maze.paintMaze(g); //creates the walls e.paintImg(ent, g); p.paintImg(ent, g); } } 拆分和解析更容易..

或使用4;12,2365,85;6,11,12,8;列表..

希望这会有所帮助..我最了解它的方式。

答案 1 :(得分:0)

这个区块看起来不对:

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 11 2 21 2 3 3,{{ 1}}。仅1 2 3 4 4就够了。

然后,我不认为这是阻碍你的问题,但是......

inFile>> weight[i];

如果您无法读取该文件,则不应只打印“OPSS”,应退出或抛出异常。无论如何,你不能只是继续,因为其余的代码需要文件存在。