Пожалуйста, рассмотрите код ниже:
vector<__int64> vNumbers;
copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers));
Если я войду 1 23 45
и нажмите Enter
вектор будет заполнен 45, 23, 1, числами.
Теперь простой вопрос. Как я могу изменить код, чтобы, если я нажму Enter
и вводить новые числа числа тоже были добавлены в вектор? Другими словами, как настроить завершение потокового итератора?
Проблема в том, что поток читает как можно дальше, не блокируя снова. Как только вы нажмете [Enter]
, stdin сбрасывается операционной системой (в некоторых случаях не во всех). Поток читает до EOF или до тех пор, пока больше нечего будет читать. Это то, что происходит при каждом сбросе (куча новых данных доступна сразу).
Вот почему разные люди наблюдают разное поведение. Как только вы передадите файл в поток, он сразу получит доступ ко всему файлу и остановится только в конце файла. Новые строки — это просто пробелы в потоке, а также пробелы и табуляция.
Вы не можете решить эту проблему, не контролируя вход на более низком уровне.
Других решений пока нет …