У меня есть текстовый файл с множеством строк. Я хочу хранить каждую строку в векторе строк. Я хочу читать из файла, пока не будет достигнута последняя строка. Я использовал функцию EOF, но, похоже, она хранит пустые строки после последней строки. Вот фрагмент моего кода. text_list — это вектор, в котором хранятся все строки файла.
void TextBuddy::storeDataFromFileInVector(string filename){
ifstream infile;
int numbers;
string textMessage;
infile.open(filename);
while (!infile.eof()){
getline(infile, textMessage);
text_list.push_back(textMessage);
}
infile.close();
}
eof () не смотрит в будущее. Таким образом, когда вы находитесь прямо перед EOF, вы также прочитаете это в свой вектор и, возможно, испортите его.
Лучший способ прочитать все строки в векторе:
string line;
while(getline(inFile, line)
text_list.push_back(line);
Ваш цикл прервется, как только вы прочитаете EOF или произойдет любая другая ошибка.
Другой метод использует итераторы и библиотеку алгоритмов:
copy(istream_iterator<string>(inFile), istream_iterator<string>(),
back_inserter(text_list));
Это зависит от вас, какой вы предпочитаете.
Пустые строки, множественное число? Вы должны проверить, достигло ли оно EOF, прежде чем нажать на список.
infile.open( filename );
getline( infile, textMessage );
while( !infile.eof() )
{
text_list.push_back( textMessage );
getline( infile, textMessage );
}
редактировать: ответ KasF лучше.