# std::insert_iterator

< cpp‎ | iterator

定义于头文件 `<iterator>` |  |
template< class Container > class insert_iterator : public std::iterator< std::output_iterator_tag, void,void,void,void > |  | (C++17 前)
template< class Container > class insert_iterator; |  | (C++17 起)

`std::insert_iterator` 是在提供的迭代器所指向的位置，插入元素到为之构造迭代器的容器的 老式输出迭代器 (LegacyOutputIterator) 。凡在赋值给迭代器时（无论是否解引用）调用元素的 `insert()` 成员函数。自增 `std::insert_iterator` 是无操作。

### 成员类型

成员类型 | 定义
`iterator_category` | std::output_iterator_tag
`value_type` | void
`difference_type` |
void | (C++20 前)
std::ptrdiff_t | (C++20 起)
`pointer` | void
`reference` | void
`container_type` | `Container`

要求通过从 std::iterator<std::output_iterator_tag, void, void, void, void> 继承获得成员类型 `iterator_category`、 `value_type`、 `difference_type`、 `pointer` 及 `reference` 。 | (C++17 前)

### 成员函数

(构造函数) | 构造新的 `insert_iterator` (公开成员函数)
operator= | 插入对象到关联的容器 (公开成员函数)
operator* | 无操作 (公开成员函数)
operator++operator++(int) | 无操作 (公开成员函数)

### 成员对象

成员名 | 定义
`container` (受保护成员对象) | `Container*` 类型指针
`iter` (受保护成员对象) | `Container::iterator` (C++20 前)`ranges::iterator_t<Container>` (C++20 起) 类型迭代器

### 示例

    #include <vector>
    #include <list>
    #include <iostream>
    #include <iterator>
    #include <algorithm>

    int main()
    {
        std::vector<int> v{1,2,3,4,5};
        std::list<int> l{-1,-2,-3};
        std::copy(v.begin(), v.end(), // 可用 std::inserter 简化
                  std::insert_iterator<std::list<int>>(l, std::next(l.begin())));
        for (int n : l)
            std::cout << n << ' ';
        std::cout << '\n';
    }

输出：

    -1 1 2 3 4 5 -2 -3

### 参阅

inserter | 创建拥有从实参推出的类型的 std::insert_iterator (函数模板)
back_insert_iterator | 用于在容器尾部插入的迭代器适配器 (类模板)
front_insert_iterator | 用于在容器头部插入的迭代器适配器 (类模板)