Используйте std::getline
, чтобы прочитать каждую строку и поместить их в свой контейнер результатов.
std::vector<std::string> lines;
for (std::string line; std::getline(f, line); lines.push_back(line));
Редактировать: Реми Лебо уже ответил на вопрос ОП, я хочу уточнить свой код:
Обычно для чтения строк в файле мы пишем что-то вроде
while (f.good())
{
std::string line;
std::getline(f, line);
lines.push_back(line);
}
Поскольку std::istream
можно преобразовать в логическое значение , мы можем переписать его как:
while (f)
{
std::string line;
std::getline(f, line);
lines.push_back(line);
}
И поскольку std::getline
возвращает сам входной поток , мы можем использовать его в качестве условия цикла:
std::string line;
while (std::getline(f, line))
{
lines.push_back(line);
} // `line` still can be used after this line, outside its scope
Но мы должны вытащить временную переменную line
наружусвоей области.Чтобы избежать этого, мы используем for
вместо while
цикла и объявляем line
внутри for
цикла:
for (std::string line; std::getline(f, line); )
{
lines.push_back(line);
}
Наконец, поскольку тело цикла содержит только 1 строку, мы можемпоместите его внутрь for
петли тоже:
for (std::string line; std::getline(f, line); lines.push_back(line));