Должна быть причина для префикса getline или istream_iterator, если вы выполняете линейный ввод из файла (чтение строки в строку, для токенизации).getline vs istream_iterator
ответ
я иногда (в зависимости от ситуации) написать класс строки, так что я могу использовать 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::copy(std::istream_iterator<Line>(std::cin),
std::istream_iterator<Line>(),
std::back_inserter(lines)
);
}
getline
доставит вам всю строку, тогда как istream_iterator<std::string>
предоставит вам отдельные слова (разделенные пробелами).
Зависит от того, что вы пытаетесь выполнить, если вы спрашиваете, что лучше (токенизация - всего лишь один бит, например, если вы ожидаете хорошо сформированную программу, и вы ожидаете ее интерпретировать, возможно, лучше читать целые строки ...)
Извините, я должен был добавить, что линия разделена запятой. так что istream_iterator
Если вы не ожидаете, что ввод будет искаженным _EVER_, что сложно сказать, да, вы получите целую строку. – dirkgently
Каждая ячейка на линии также не должна содержать пробелов. –
Вы вроде ответил себе на вопрос - используйте 'getline', чтобы получить строка или 'istream_iterator' для токенизации. –