私は C++ を初めて使用します。これがばかげた質問である場合は申し訳ありません。なぜこれが機能しないのか理解できないようです。最初のベクトルにコピーし、2 番目のコピー呼び出しをスキップするようです。
#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;
}
copy 関数を使用して、 istream_iterator 入力を任意の数のベクトルに読み取りたい (ベクトルごとに 1 回呼び出してコピーする)。つまり、コンソールに「1 2 3 4 5 ctrl+d」と入力して、最初のベクトルに 1,2,3,4,5 を入力できるようにしたいと考えています。次に、コンソールに「6 7 8 9 10 ctrl+d」と入力し、2 番目のベクトルに 6,7,8,9,10 を入力します。
問題は、最初のベクトルに何らかの入力を入力して control+d を押した後、cin の失敗状態に関係なく、cin の istream_iterator が istream_iterator() と同じままであることです。これにより、以降のすべての「copy」呼び出しが失敗します (istream_iteratorcin は、プログラムが eof として解釈する istream_iterator() と既に等しいため)。私の質問は次のとおりです。cinストリームとともにイテレータを「リセット」するにはどうすればよいですか? cin.clear() は実際にすべての失敗ビットをクリアしています。ただし、 istream_iterator(cin) は istream_iterator() と同じです。私が理解していることから、ストリームにバインドされている istream_iterators は、ストリームが失敗状態にある場合にのみ、デフォルトの istream_iterator 値と等しくなければなりません。私は何が欠けていますか?