2

私は現在、ostream イテレータ (イテレータ アダプタ) について読んでおり、著者は次の例を示しています。

/* Declare an ostream_iterator that writes ints to cout. */
ostream_iterator<int> myItr(cout, " ");
/* Write values to the iterator. These values will be printed to cout. */
*myItr = 137; // Prints 137 to cout
++myItr;
*myItr = 42; // Prints 42 to cout
++myItr

値を割り当てた後に例が ++myItr を実行する理由について知りたいです。

4

2 に答える 2

3

イテレータはポインタをモデルにしています。これには出力反復子が含まれます。ポインターが指す領域にデータをコピーするときは、ポインターを逆参照し、割り当てを行ってから、ポインターをインクリメントします。出力変数*のこれらを含め、イテレータにも同じことを行います。

次のように、インクリメントと割り当てを組み合わせるのが通例です。

*myItr++ = 137; // Prints 137 to cout
*myItr++ = 42; // Prints 42 to cout

イテレータが割り当てられてインクリメントされることを期待している場合、イテレータとそれらを期待するアルゴリズムを組み合わせて一致させることができます。たとえば、あるstd::copyコンテナを別のコンテナにコピーしたり、コンテナを配列にコピーしたり、配列からコンテナに入力したりするために使用できるのと同じアルゴリズムを呼び出して、コンテナの印刷を実行できます。


*++の両方のオーバーロードがに対して何もしないことに注意する価値がありますostream_iterator。の要件を満たすために含まれていますOutputIterator。詳細については、このリンクを参照してください。

于 2013-07-29T01:29:00.143 に答える
0

特に ostream_iterator クラスの場合、C++ では挿入時にストリームが自動的に進むため、operator++() 演算子は効果を持つ必要はありません。 http://www.cplusplus.com/reference/iterator/ostream_iterator/operator++/

于 2013-07-29T01:34:38.450 に答える