2015-02-24 74 views
2

我在这个网站上的第一个问题。另外对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

'而( inFile.good())'this should''while(inFile >> skills)' – 2015-02-24 12:55:29

回答

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

看起来precedence_per_activity被定义为:

vector<vector<int>> precedence_per_activity; 

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

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

确实,这个+我的答案应该修复它。 – amchacon 2015-02-24 12:59:07

+0

我不需要在这里声明'v'和'i'吗?因为这是C++现在给出的错误... – user4601116 2015-02-24 13:09:27

+0

@ user4601116哎呀,忘了'auto's,编辑答案 – 2015-02-24 13:14:27