#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
vector<int> vin;
/*while (in_iter!=eof)
{
vin.push_back(*in_iter++);
}*/
istream_iterator<int> in_iter2(cin), eof2;
vector<int> vin2(in_iter2,eof2);
return 0;
}
Когда я ввожу 1 2 3 c
(последний элемент ‘c’ должен сделать состояние cin EOF) для программы, наконец,vin2
будет содержать элементы: 2 3
; Однако, когда я аннотирую объявление переменной in_iter
, тот же вклад сделает vin2
содержать элементы:1 2 3
Как работает объявление переменной in_iter
сделать эффект для этой программы? Спасибо!
Привязка istream_iterator
для istream
вызывает чтение одного значения из istream
и хранится в итераторе. Это необходимо для того, чтобы разыменование итератора могло дать значение. Так что, если вы связываете 2 istream_iterators
к тому же istream
, 2 значения будут прочитаны.
Редко полезно иметь 2 активных итератора istream, привязанных к одному и тому же потоку.
В качестве слегка интересного эксперимента посмотрите, что произойдет, если вы создадите оба in_iter
а также in_iter2
оба связаны с cin
и инициализировать ваш вектор с in_iter
(или тот, который был создан первым).
Других решений пока нет …