Как я могу использовать std :: copy для чтения напрямую из файлового потока в контейнер? - PullRequest
4 голосов
/ 22 августа 2011

Я наткнулся на замечательный пример STL, который использует istream_iterators для копирования из ввода std (cin) в вектор.

vector<string> col1;
copy(istream_iterator<string>(cin), istream_iterator<string>(),
    back_inserter(col));

Как бы я сделал что-то похожее для чтения из файлового потока прямо в контейнер? Скажем так: это простой файл с содержимым:

"Быстрая коричневая лиса перепрыгнула через ленивых собак."

Я хочу, чтобы каждое слово было отдельным элементом в векторе после строки копирования.

Ответы [ 3 ]

11 голосов
/ 22 августа 2011

Замените cin объектом потока файлов после успешного открытия файла:

ifstream file("file.txt");

copy(istream_iterator<string>(file), istream_iterator<string>(),
                                                 back_inserter(col));

Фактически, вы можете заменить cin любым стандартным C ++ input stream.

std::stringstream ss("The quick brown fox jumped over the lazy dogs.");

copy(istream_iterator<string>(ss), istream_iterator<string>(),
                                                 back_inserter(col));

Есть идея? col будет содержать слова строки, которую вы передали std::stringstream.

6 голосов
/ 22 августа 2011

Точно так же с экземпляром fstream вместо cin.

3 голосов
/ 24 мая 2013

Я не думаю, что функция копирования необходима, так как вектор имеет конструктор с началом и концом в качестве итераторов.

Таким образом, я думаю, что это нормально для вас:

ifstream file("file.txt");
vector<string> col((istream_iterator<string>(file)), istream_iterator<string>());

Избыточный () для удаления Most_vexing_parse

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