2017-11-30 11 views
3
ifstream dataFile("ints.dat"); 

istream_iterator<int> dataBegin(dataFile); 
istream_iterator<int> dataEnd; 

list<int> data(dataBegin, dataEnd); 

上記のコードはC++ STLにあります。istreamを使用してファイルからintデータを読み取る

上記のコードは機能しています。

開始と終了のイテレータをdata beginとdata endとして作成しています。しかし、dataEndはデータファイルとは関係ありません。リストはその範囲をどのように知っていますか?

+0

栄光のEOF定数である「dataEnd」を考えてみましょう。 –

答えて

4

refの例のように、std::istream_iterator<int> eos;と表示されているのが普通ですが、あなたの選択した名前があなたに適しているかもしれません。

EOFと似ていますが、これは標準入力の場合、ファイルの最後が読み込まれる最後の要素を超えて1を表します。

eosは、最後に読み取られる要素の1を表す最後のイテレータのようなものです。

EOFと似ていますが、同じではありません。たとえば、ストリームの終わりの名前は実際には関係ありません。上記で提供したリンクでは、可能であれば実装することができます。

また、cpprefernceは言及:

デフォルトに構成STD :: istream_iteratorが エンドオブストリームイテレータとして知られています。有効なstd :: istream_iteratorが基本ストリームの末尾の に到達すると、はストリームの終わり イテレータに等しくなります。逆参照またはそれをインクリメントすると、未定義の が呼び出されます。

そしてcplusplusから、我々は、この持っている:

これらの演算子は、ヘッダ<iterator>にオーバーロードされます。

+0

あなたのストリームの終わりの名前は本当に重要ではありません。 OPの例の文脈では、私は、より明白にそれがマーキングしているものに関係しているので、 'dataend'から' eos'への名前を好む。 – Caleth

+0

@Calethを修正。 – gsamaras

関連する問題