2015-11-30 3 views
0

Я новичок в C++ и имею некоторые проблемы. В основном я должен читать разные текстовые файлы и использовать количество строк как размер для строк двумерного массива.Прочитайте количество строк из текстового файла и сохраните их как константу int для размера массива C++

Входной файл выглядит следующим образом:

int_n1 int_n2 (Это 2 целые числа, необходимые в дальнейшем для обработки)

(пустая строка)

[количество медсестер] [140] (слишком много, чтобы впечатать)

ссылку на то, что это на самом деле выглядит как здесь http://puu.sh/lEh2y/e4f740d30f.png

Мой код выглядит следующим образом:

//maak inputStream klaar voor gebruik 
ifstream prefFile(INPUTPREF); 
//test of de inputstream kan geopend worden 
if (prefFile.is_open()) 
{ 
    // new lines will be skipped unless we stop it from happening:  
    prefFile.unsetf(std::ios_base::skipws); 

    // count the newlines with an algorithm specialized for counting: 
    unsigned line_count = std::count(std::istream_iterator<char>(prefFile),std::istream_iterator<char>(),'\n'); 

    int aantNurse = line_count + 1 - 2; 

    int nursePref[aantNurse][140]; 
} 

Конечно, просто положив «сопзЬ» перед «Int aantNurse» не работает. Есть ли у кого-нибудь предложение о том, как это решить? Я бы предпочел не использовать огромный массив, который бы соответствовал всем, хотя это могло быть возможно.

+0

Почему бы не использовать 'std :: vector'' std :: string'? – NathanOliver

+0

На более позднем этапе мне нужно будет обрабатывать все числа из входного файла в массивах и использовать их в генетическом алгоритме. Я считаю, что массивы более эффективны для этого, нет? – KJChabot

+0

Чтобы 'anantNurse' был' const', он должен быть инициализирован, когда он объявлен. Поэтому вместо инициализации 'line_count', как и вы, просто инициализируйте' const int aantNurse'. –

ответ

1

В качестве одного из возможных решений вы можете выделить память для своего массива nursePref динамически и отпустить его в конце.

Просто что-то вроде этого:

int** nursePref = new int*[aantNurse]; 
for (int i = 0; i < aantNurse; ++i) { 
    nursePref[i] = new int[140]; 
} 

Затем отпустите его должным образом с помощью delete[]:

for (int i = 0; i < aantNurse; ++i) { 
    delete[] nursePref[i]; 
} 
delete[] nursePref; 

Кроме того, как он уже сказал, с использованием векторов является лучшей идеей:

std::vector<std::vector<int> > nursePref(aantNurse, std::vector<int>(140));