istream iterator — странный результат istream_iterator в переполнении стека

#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 сделать эффект для этой программы? Спасибо!

2

Решение

Привязка istream_iterator для istream вызывает чтение одного значения из istreamи хранится в итераторе. Это необходимо для того, чтобы разыменование итератора могло дать значение. Так что, если вы связываете 2 istream_iterators к тому же istream, 2 значения будут прочитаны.

Редко полезно иметь 2 активных итератора istream, привязанных к одному и тому же потоку.

В качестве слегка интересного эксперимента посмотрите, что произойдет, если вы создадите оба in_iter а также in_iter2оба связаны с cinи инициализировать ваш вектор с in_iter (или тот, который был создан первым).

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]