効果的なSTL:4、イテレータ

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_30534935/article/details/102764825

イテレータ、const_iteratorの、reverse_iteratorとconst_reverse_iterator:一見すると、コンセプトは、実際には4つの異なるイテレータ型を提供し、非常に単純なSTLのイテレータを持っているようだが、詳しく見てみ、あなたは気づくでしょう、STLの標準コンテナ。あなたはさらに、インサートの特定の形態のために、気づくと機能を消去、イテレータの4種類の一方のみが許容できるコンテナですします。質問です:なぜ我々は、4つの異なるイテレータ、それが必要なのでしょうか?それらの間の関係は何ですか?彼らは互換性はありますか?あなたはSTLアルゴリズムと機能する他のツールではイテレータの異なるタイプを混在することはできますか?それぞれの容器とそのメンバ関数と、それをどうするかの間にこれらの反復?


この章では、上記の質問に対する答えを模索することを目指し、実際のイテレータ型に十分な注意を得ることはありません。ご紹介します:istreambuf_iterator。あなたはSTLを使用することを好むが、その後istream_iterator文字ストリームは、パフォーマンスは非常に満足のいくものではない読んで使用している場合は、その後、istreambuf_iteratorはあなたが必要とするツールです。



第26条:const_iteratorの、reverse_iterator、const_reverse_iteratorの反復子の優先順位


いくつかのインサートのバージョンと消去機能は、イテレータを使用する必要があります。あなたはこれらの関数を呼び出す必要がある場合は、イテレータを使用する必要があります。constのイテレータと逆のタイプは、これらの機能の要件を満たすことができません。

暗黙的にイテレータでも広く使用されていないイテレータ技術に変換const_iteratorのを使用して、不可能で変換しますが、保証の効率がないconst_iteratorのを教えてください。

使用前に、イテレータから変換reverse_iteratorからに応じて調整する必要があるかもしれません。



第27条:イテレータに変換距離とコンテナ事前const_iteratorのを使用して


長距離通話が正常にコンパイル取得するには、あいまいさを排除する必要があります。最も簡単な方法は、明示的に使用されるタイプのパラメータ距離を指定することで、型パラメータを推測するために、コンパイラを防ぐことができます。



第28条:基地reverse_iterator()メンバ関数生成イテレータの使用の正しい理解


塩基()関数を介して反復子が正確でない「対応する」reverse_iteratorを得ることができます。

挿入操作の場合、この関係は存在しません。しかし、削除操作のために、状況はそれほど単純ではありません。



第29条:文字による入力文字の場合は、istreambuf_iteratorを使用することを検討してください


あなたは1で、入力ストリーム1から文字を読み取る必要がある場合は、フォーマットされた入力を使用しないでください。あなたは、ストリームを読んで時間を費やしている心配している場合は、複数の入力の使用はistreambuf_iteratorそれは大きな達成することができ、唯一の3文字をistream_iterator置き換えますパフォーマンスの向上。文字入力処理による非フォーマットされた文字について、あなたは常にistreambuf_iteratorを使用して検討すべきです。

同様に、非文字ごとにフォーマット出力処理のために、あなたはostreambuf_iteratorを使用することを検討すべきです。それは、より優れた性能を持っているostream_iteratorの使用によってもたらされる追加的な負担を避けることができます。



おすすめ

転載: blog.csdn.net/qq_30534935/article/details/102764825