最終更新日時(UTC): 2020年11月13日 00時56分16秒
onihusube が更新

履歴 編集

class template
<iterator>

# std::insert_iterator

    namespace std {
      template <class Container>
      class insert_iterator
        : public iterator<output_iterator_tag, void, void, void, void>;
    }

## 概要

`insert_iterator`は出力イテレータであり、代入の際にコンテナの`insert()`メンバ関数を呼び出すイテレータアダプタである。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ |
`~insert_iterator() = default` | デストラクタ |
`operator=` | 代入演算子 |
`operator*` | 間接参照演算子 |
`operator++` | イテレータをインクリメントする |

## protectedメンバ変数

変数名 | 型 | 対応バージョン
--- | --- | ---
`container` | `Container*` |
`iter` | `Container::iterator` |

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`container_type` | `Container` |
`difference_type` | `void` |
`difference_type` | `ptrdiff_t` | C++20
`pointer` | `void` |
`value_type` | `void` |
`iterator_category` | `output_iterator_tag` |
`reference` | `void` |

## 非メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`inserter` | `insert_iterator`のヘルパ関数 |

## 例

    #include <iostream>
    #include <set>
    #include <iterator>
    #include <algorithm>

    int main()
    {
      std::set<int> src = {1, 2, 3};
      std::set<int> dest;

      // srcの要素をdestに挿入しながらコピー
      std::copy(src.begin(), src.end(), std::inserter(dest, dest.end()));

      for (int x : dest) {
        std::cout << x << std::endl;
      }
    }

### 出力

    1
    2
    3

## 参照

- P0896R4 The One Ranges Proposal (was Merging the Ranges TS)