Я новичок в C ++, извините, если это глупый вопрос.Я не могу понять, почему это не работает.Он копирует в первый вектор и, похоже, пропускает второй вызов копирования.
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main ()
{
vector<int> first;
vector<int> second;
copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(first));
cin.clear();
copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(second));
return 0;
}
Я хочу использовать функцию копирования для чтения ввода istream_iterator в любое количество векторов (один вызов для копирования на вектор),Другими словами: я хочу иметь возможность ввести «1 2 3 4 5 ctrl + d» в консоль и ввести 1,2,3,4,5 в первый вектор.Затем введите «6 7 8 9 10 ctrl + d» в консоль и введите 6,7,8,9,10 во второй вектор.
Проблема в том, что после того, как я ввел некоторый ввод в первый вектор и нажал control + d, istream_iterator для cin остается равным istream_iterator (), независимо от состояния сбоя cin.Это приводит к сбою при каждом последующем вызове «copy» (потому что istream_iteratorcin уже равен istream_iterator (), который программа интерпретирует как eof).Итак, мой вопрос: что мне нужно сделать, чтобы «сбросить» итератор вместе с потоком cin?cin.clear () действительно очищает все биты сбоя.Однако istream_iterator (cin) все равно равен istream_iterator () независимо.Из того, что я понимаю, istream_iterators, которые связаны с потоком, должны быть равны значению istream_iterator по умолчанию, только когда поток находится в состоянии сбоя.Чего мне не хватает?