についてstd::istream_iterator<T>
:この型は、I/O をストリーミングするための反復子インターフェイスを提供します。ここで、begin
とはイテレータです (の入力で表される、 のend
「仮想」コンテナ内のイテレータと考えることができます)。string
cin
begin
は で初期化されるためcin
、私が「アクティブな」イテレータと呼ぶものになります。cin
最初に逆参照されたとき ( のように)から読み取られ、*begin
事前または事後インクリメント ( begin++
.
は何も初期化されていないためend
、アクティブな反復子ではなく、特別な「終了マーカー」反復子になります。この特別なイテレータ値の唯一の目的は、アクティブなイテレータがファイルの最後に到達したときに等しいものと比較できるようにすることです。
このようにして、ファイルからの一連のT
(この場合はstring
) の読み取りは、コンテナの通常のイテレータ トラバーサルに押し込むことができます :)
[編集: の動作を明確にしoperator[]()
ました。]
に関してstd::map<string, int>
:マップは、小さな整数以外のもの(この場合は文字列)によってインデックス付けできる非常に一般的なタイプの配列と考えることができます。std::map<K, T>
型オーバーロードはoperator[]()
、キー引数によって識別される既存の要素への参照を返します。マップにそのキーを持つ要素が存在しない場合、デフォルト値が追加されるという追加の (ここにあるように、しばしば役立つ) 機能があります。 ( の場合は 0 int
) であり、この新しい要素への参照が返されます。