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