# std::back_insert_iterator

< cpp‎ | iterator

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

`std::back_insert_iterator` 后附到为之创建它的容器的老式输出迭代器 (LegacyOutputIterator) 。凡在赋值迭代器时调用容器的 `push_back()` 成员函数（无论是否解引用）。自增 `std::back_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 前)

### 成员函数

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

### 成员对象

成员名称 | 定义
`container` (受保护成员对象) | 类型 `Container*` 的指针

### 示例

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

    int main()
    {
        std::vector<int> v;
        std::generate_n(std::back_insert_iterator<std::vector<int>>(v), // std::back_inserter
                        10, [n = 0]() mutable { return ++n; });         // 可用以简化
        for (int n : v)
            std::cout << n << ' ';
        std::cout << '\n';
    }

输出：

    1 2 3 4 5 6 7 8 9 10

### 参阅

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