getline vs istream_iterator - PullRequest
       16

getline vs istream_iterator

1 голос
/ 13 ноября 2009

Если есть причина использовать префикс getline или istream_iterator, если вы делаете построчный ввод из файла (чтение строки в строку для токенизации).

Ответы [ 2 ]

12 голосов
/ 13 ноября 2009

Я иногда (в зависимости от ситуации) пишу класс строки, чтобы я мог использовать istream_iterator:

#include <string>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>

struct Line
{
    std::string lineData;

    operator std::string() const
    {
        return lineData;
    }
};
std::istream& operator>>(std::istream& str,Line& data)
{
    std::getline(str,data.lineData);
    return str;
}

int main()
{
     std::vector<std::string>    lines(std::istream_iterator<Line>(std::cin),
                                       std::istream_iterator<Line>());
}
6 голосов
/ 13 ноября 2009

getline даст вам всю строку, тогда как istream_iterator<std::string> даст вам отдельные слова (разделенные пробелами).

Зависит от того, что вы пытаетесь выполнить, если вы спрашиваете, что лучше (токенизация - всего один бит, например, если вы ожидаете хорошо сформированную программу и ожидаете интерпретировать ее, может быть, лучше прочитать полностью линии ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...