2

以下のコードを検討してください。

vector<__int64> vNumbers;   
copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers));

入力1 23 45して押すとEnter、ベクトルは 45、23、1、数字で埋められます。簡単な質問です。Enter新しい数字を押して入力すると、数字がベクトルにも追加されるようにコードを変更するにはどうすればよいですか? つまり、ストリーム イテレータの終了を構成する方法は?

4

1 に答える 1

1

あなたが抱えている問題は、ストリームが再びブロックすることなく可能な限り読み取ることです。を押すとすぐに[Enter]、stdinはオペレーティングシステムによってフラッシュされます(場合によっては、すべての場合ではありません)。ストリームは、EOFになるまで、または読み取るものがなくなるまで読み取ります。これは、すべてのフラッシュで発生することです(一度に利用可能な新しいデータの束)。

そのため、さまざまな人々がさまざまな行動を観察します。ファイルをストリームにパイプするとすぐに、ファイル全体が一度に使用可能になり、ファイルの最後でのみ停止します。改行は、スペースやタブと同様に、ストリームに対する単なる空白です。

より低いレベルで入力を制御せずにこの問題を解決することはできません。

于 2012-10-17T12:03:52.103 に答える