我在这个网站上的第一个问题。再加上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;
}
然而,这并没有给出好结果。
有人可以帮我吗?我真的看不到任何解决方案..
答案 0 :(得分:1)
看起来precedence_per_activity
定义为:
vector<vector<int>> precedence_per_activity;
所以要打印你想要的东西:
for (auto v : precedence_per_activity) {
for (auto i : v) {
cout << i << ' ';
}
cout << endl;
}
答案 1 :(得分:0)
问题在于:
//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);
}