2011-05-20 7 views
4

私は、ostreamとistreamのイテレーターを見て、彼らがどれほど実際に使用されているかを疑問に思っています。私は本のカップルやWebページの多くを見てきましたし、すべてが常にこれらのストリーム反復子は、実際のファイルやバイナリデータを使用することができますストリームイテレータの使用?

ostream_iterator<int> out_it (cout,", "); 
    copy(myvector.begin(), myvector.end(), out_it); 

のように同じ例の変形であるとことは通常行われていますか?

答えて

0

よくfstreamファミリはistream/ostreamを継承しています。

ofstream outFile("myfile"); 

//.............. 

ostream_iterator<data> dataIterOut(outFile); 

どのくらい一般的なのかがより面白いです。私の経験では、それほどではありません。説得力のある動機づけは、標準的なアルゴリズム(またはあなた自身の作成の一部)を活用することです。しかし、あなたが読み書きしたい構造体/クラスは、必要なインフラストラクチャ(ctors、ストリーム演算子など)をすでに用意している必要があるため、ほとんどの人がその点を見ないと思います。例えば。

data d(...); 

*dataIterOut = d; //meh. little work saved, short on clarity 
1

によって異なります。 テストを除き、入力ストリームのイテレータはファイル の一部だけを簡単に読み取ることができず、出力イテレータは区切り文字を挿入するのではなく、ターミネータを追加します。しかし、多くは依存する。 で作業している場合、多くのファイルがあり、数字のリストがちょうど である場合は、適切かもしれません。ターミネータが適切な場合は があります。

1

です。 Unixスタイルのフィルタの順番に何かを書いているのであれば、うまく動作することができます。そうでなければ、彼らはそれほど有用ではありません。

もっと便利なもの(少なくともIME)を追加すると、指定されたセパレータが1つ1つの要素の後にではなく、要素の間に挿入されるだけです(infix_iterator)。技術的には、その時点ではもはやostream_iteratorを使用していませんが、残りのコードのほとんどがその違いを気にする必要はありません。