есть ли способ остановить istream_iterator при обнаружении новой строки? - PullRequest
0 голосов
/ 11 июля 2020
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    vector<char> a(n);
    copy(istream_iterator<char>(cin),istream_iterator<char>(),a.begin());
    copy(a.begin(),a.end(),ostream_iterator<char>(cout," "));    
    return 0; 
}

в 7-й строке, чтобы остановить istream_iterator, необходимо явно остановить Ctrl + z

В противном случае istream_iterator продолжает ожидать ввода и застревает там, пока пользователь нажимает Ctrl + Z, а затем выполняется остальной код

1 Ответ

0 голосов
/ 11 июля 2020

Нет, и в вашем случае это было бы неправильно. Если вы остановитесь на новой строке, пользователь, возможно, ввел больше, чем n char s, и тогда у вас будет неопределенное поведение, поскольку вы бы написали за пределами.

Вам нужно copy_n:

copy_n(istream_iterator<char>(cin), n, a.begin());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...