2015-02-24 3 views
2

Мой первый вопрос на этом сайте. Плюс довольно новый для C++.Неизвестный переменный размер столбца в векторе

Я искал способ заполнить вектор из текстового файла. Однако размер столбца каждой строки отличается и неизвестен заранее.

Позвольте мне показать вам пример, это текстовый файл, я хотел бы получить в векторе:

3 

1 1 

1 2 

0 

(Значение таблицы: есть 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 должно быть' while (inFile >> skills) ' –

ответ

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

+0

Не нужно ли объявлять 'v' и 'i' здесь? Потому что это ошибка C++ теперь дает ... – user4601116

+0

@ user4601116 oops, забыли 'auto', отредактированный ответ –

Смежные вопросы