我是 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 后,cin 的 istream_iterator 仍然等于 istream_iterator(),无论 cin 的失败状态如何。这会导致每次对“复制”的后续调用都失败(因为 istream_iteratorcin 已经等于程序解释为 eof 的 istream_iterator())。所以我的问题是:我需要做什么来“重置”迭代器以及 cin 流?cin.clear() 确实清除了所有失败位。然而 istream_iterator(cin) 仍然等于 istream_iterator() 无论如何。据我了解,绑定到流的 istream_iterators 仅应在流处于失败状态时等于默认的 istream_iterator 值。我错过了什么?