【问题标题】:Unknown variable column size in vector向量中的未知变量列大小
【发布时间】:2015-02-24 12:47:16
【问题描述】:

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

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

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

3

1 1

1 2

0

(表的含义:项目 x 中有 3 个活动,第一个活动有 1 个直接前任(活动 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;
}

但是,这并没有给出好的结果。

谁能帮帮我?我真的看不到任何解决方案..

【问题讨论】:

  • while (inFile.good()) 这应该是while (inFile &gt;&gt; skills)

标签: c++ variables vector visual-studio-2013 ifstream


【解决方案1】:

看起来precedence_per_activity 被定义为:

vector<vector<int>> precedence_per_activity;

所以要打印你想要的东西:

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

【讨论】:

  • 没错,这个+我的回答应该可以解决它。
  • 我不需要在这里声明'v'和'i'吗?因为那是 C++ 现在给出的错误...
【解决方案2】:

问题出在这里:

//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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多