最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

class
<iterator>

# std::iterator tag

    namespace std {
      struct input_iterator_tag { };
      struct output_iterator_tag { };
      struct forward_iterator_tag : public input_iterator_tag { };
      struct bidirectional_iterator_tag : public forward_iterator_tag { };
      struct random_access_iterator_tag : public bidirectional_iterator_tag { };
      struct contiguous_iterator_tag: public random_access_iterator_tag { };  // C++20から
    }

## 概要

`<iterator>`ヘッダでは、イテレータを分類するためのタグ(空クラス)を定義している。

型 | 説明 | 対応バージョン
--- | --- | ---
`input_iterator_tag` | 入力イテレータ |
`output_iterator_tag` | 出力イテレータ |
`forward_iterator_tag` | 前方向イテレータ |
`bidirectional_iterator_tag` | 双方向イテレータ |
`random_access_iterator_tag` | ランダムアクセスイテレータ |
`contiguous_iterator_tag` | 隣接イテレータ | C++20

イテレータの関係性の定義に従い、これらのクラスは継承関係を持っている。

これらのタグは、コンパイル時にイテレータの分類を判定し、イテレータごとの最適な実装を選択するために使用される。

使用例は、`distance()`関数の実装例を参照。