Я использую станд.:: getline () для чтения строк из станд.:: istream-производный-класс, как я могу продвинуться несколько строк?
Я должен просто считать и отбросить их?
Изменить: Вы также можете использовать std :: istream :: ignore, см. https://stackoverflow.com/a/25012566 / 492336
Должен ли я использовать getline для определения количества строк, которые я хочу пропустить?
Нет, но, вероятно, это будет самое ясное решение для тех, кто читает ваш код. Если количество строк, которые вы пропускаете, велико, вы можете повысить производительность, читая большие блоки и подсчитывая символы новой строки в каждом блоке, останавливая и перемещая файл в положение последней новой строки. Но если у вас нет проблем с производительностью, я бы просто поместил getline в цикл для количества строк, которые вы хотите пропустить.
Для чего это стоит:
void skip_lines(std::istream& pStream, size_t pLines)
{
std::string s;
for (; pLines; --pLines)
std::getline(pStream, s);
}
Да, используйте std :: getline
, если вы не знаете расположение новой строки.
Если по какой-то странной причине вы знаете, где появляются символы новой строки, вы можете сначала использовать ifstream :: seekg
.
Вы можете читать и другими способами, например ifstream :: read
, но std :: getline
, вероятно, является самым простым и понятным решением.