矢量中未知的可变列大小

Unknown variable column size in vector

本文关键字:未知      更新时间:2023-10-16

我在这个网站上的第一个问题。加上C++的新功能。

我一直在寻找一种从文本文件中填充矢量的方法。然而,每一行的列大小是不同的,并且事先未知。

让我给你看一个例子,这是我想在矢量中获得的文本文件:

3
1 1
1 2
0

(表的含义:项目x中有3个活动,第一个活动有一个直接前身(活动1),第二个活动也有一个间接前身(活动2),最后一个活动没有前身。)

我想要这个文本文件在一个向量中,但是我有几个类似的文本文件,有不同数量的列需要读取

由于我知道每个项目中的活动数量,所以我能够定义行数。然而,我不知道列的数量。。。

我现在尝试的是使用inFile.good(),看看我是否已经到达文本文件的末尾。然而,我需要一些东西来看看我是否在这一排的最后。我已经拥有的代码是:

    //READING NUMBER OF ACTIVITIES
inFile >> nbr_activities;
cout <<  nbr_activities << endl;
//READING PRECEDENCE RELATIONSHIP
for (int i = 0; i < nbr_activities; i++)
{
    vector<int> temp_vec;
    while (inFile.good())
    {
        int skills;
        inFile >> skills;
        temp_vec.push_back(skills);
    }
    precedence_per_activity.push_back(temp_vec);
}
//PRINTING THE VECTOR
for (int i = 0; i < nbr_activities; i++)
{
    int j = 0;
    while (inFile.good())
    {
        j++;
        cout << precedence_per_activity[i][j] << ' ';
    }
    cout << endl;
}

然而,这并不是一个好结果。

有人能帮我吗?我真的看不到任何解决办法。。

看起来precedence_per_activity被定义为:

vector<vector<int>> precedence_per_activity;

所以要打印,你需要类似的东西:

for (auto v : precedence_per_activity) {
   for (auto i : v) {
        cout << i << ' ';
   }
   cout << endl;
 }

问题就在这里:

//READING PRECEDENCE RELATIONSHIP
for (int i = 0; i < nbr_activities; i++)
{
    vector<int> temp_vec;
    while (inFile.good()) // READ FULL FILE
    {
        int skills;
        inFile >> skills;
        temp_vec.push_back(skills);
    }
    precedence_per_activity.push_back(temp_vec);
}

对于每一行,您不应该读取完整的文件。你需要取第一个号码,再做一个:

//READING PRECEDENCE RELATIONSHIP
for (int i = 0; i < nbr_activities; i++)
{
    int counter;
    vector<int> temp_vec;
    inFile>>counter;
    for (int j = 0; j < counter; j++)
    {
        int skills;
        inFile >> skills;
        temp_vec.push_back(skills);
    }
    precedence_per_activity.push_back(temp_vec);
}