1

私は現在、いくつかのアイデアを理解しようとしています。C++イテレータ、そして私は疑問に思っていました...

Incremental / Single Pass / Input / Output Iteratorが与えられた場合、そのような Iterator の 1 つ後ろの位置 / 要素が実際に存在するか、またはすべて InputIterator end()Iterators が「自然に」何らかの形式の特異値であるによって特別に扱われoperator==ますか?

私が言いたいのはこれだと思います: 「上向き」のForwardIteratoroperator==からのものについては、-ness に関係なく、2 つの iterator オブジェクトendが同じ要素を指しているかどうかをチェックするだけの簡単なものを持つことは完全に理にかなっています。これは InputIterator にとって理にかなっていますか?

4

2 に答える 2

3

標準的な例はistream_iterator(テンプレート) です。これは、基になるストリームの抽出が失敗したときに特異になります。これは、同じ型のデフォルトで構築された反復子 (単一の反復子と同等) と比較することで検出できます。例えば:

std::vector<int> v(std::istream_iterator<int>(std::cin), {});

これは次と同等です。

std::vector<int> v;
for (int n; std::cin >> n; ) { v.push_back(n); }

繰り返しになりますが、1 つ前の istream イテレーターはすべて、元のストリームに関係なく同等です。これらの反復子は、「単数形」(= どのコンテナーにも関連付けられていない) と「1 つ過去」 (= 最後の参照解除可能な反復子をインクリメントした結果) が同じことを意味する例です。

于 2014-03-09T21:53:08.770 に答える