行うべき標準的なことは、からstd::iterator<std::forward_iterator_tag, T>
のみ継承することです。イテレータには1つのカテゴリしかありません。
この標準には、順方向イテレーターでもある出力イテレーターのアルゴリズム(または他の用途)がありません。標準での出力イテレータのすべての使用には、シングルパスのみが必要です。
代わりに、この標準には、フォワード/ビディ/ランダムアクセスのカテゴリの可変イテレータと不変イテレータの概念があります。イテレータを介して書き込む必要があり、シングルパスよりも優れている必要があるすべてのアルゴリズムも、それらが書き込むのと同じイテレータを介して読み取ります。これはstd::remove
、std::sort
およびその他の変更アルゴリズムです。
可変イテレータと不変イテレータの違いは、イテレータタグでは検出されません。これは、代入式が整形式であるかどうかによって決まります。したがって、たとえば、イテレータをstd::sort
不変に渡す場合、アルゴリズムはとにかくコンパイルされないため、通常、入力イテレータにも。のタグを付ける必要はありませんoutput_iterator_tag
。OutputIterator
意志を必要とするすべてのアルゴリズムは、可変ForwardIterator
で動作します。ここでも、でタグ付けする必要はありませんoutput_iterator_tag
。
標準アルゴリズムとは異なるニーズがある場合、あなたの提案がイテレータで機能しない理由をすぐに考えることはできません。ただし、可変の標準イテレータは検出されません。たとえばstd::deque<int>::iterator
、int*
イテレータカテゴリrandom_access_iterator_tag
があり、プライベートタグではなく、とは関係ありませんoutput_iterator_tag
。iterator_traits::iterator_category
したがって、必要な情報を提供するために既存のものを適応させることを期待するよりも、独自の特性クラスを定義する方がおそらく良いでしょう。