# std::experimental::ostream_joiner

< cpp‎ | experimental

定义于头文件 `<experimental/iterator>` |  |
template< class DelimT, class CharT = char, class Traits = std::char_traits<CharT>> class ostream_joiner; |  | (库基础 TS v2)

`std::experimental::ostream_joiner` 是为 std::basic_ostream 构造的单趟老式输出迭代器 (LegacyOutputIterator) ，它用 `operator<<` 写入分隔符所分隔相继对象到该流中。在每两个写入的对象间，写入分隔符到输出流。在赋值给迭代器（无论是否解引用）时进行写入操作。自增 `ostream_joiner` 是无操作。

典型实现中， `ostream_joiner` 仅有的数据成员是指向关联 `std::basic_ostream` 的指针、分隔符和指示下次写入是否对于序列中首元素的 `bool` 成员。

与 std::ostream_iterator 相比， `ostream_joiner` 少打印一次分隔符，并且不在待打印的对象类型上模板化。

### 成员类型

成员类型 | 定义
`char_type` | `CharT`
`traits_type` | `Traits`
`ostream_type` | std::basic_ostream<CharT, Traits>
`value_type` | void
`difference_type` | void
`pointer` | void
`reference` | void
`iterator_category` | std::output_iterator_tag

### 成员函数

(构造函数) | 创建新的 `ostream_joiner` (公开成员函数)
(析构函数) (隐式声明) | 销毁 `ostream_joiner` (公开成员函数)
operator= | 写入对象到关联输出序列 (公开成员函数)
operator* | 无操作 (公开成员函数)
operator++operator++(int) | 无操作 (公开成员函数)

### 非成员函数

make_ostream_joiner | 创建 `ostream_joiner` 对象，从函数参数推导模板实参 (函数模板)

### 示例

    #include <algorithm>
    #include <experimental/iterator>
    #include <iostream>
    #include <iterator>

    int main()
    {
        int i[] = {1, 2, 3, 4, 5};
        std::copy(std::begin(i),
                  std::end(i),
                  std::experimental::make_ostream_joiner(std::cout, ", "));
    }

输出：

    1, 2, 3, 4, 5

### 参阅

ostreambuf_iterator | 写入 std::basic_streambuf 的输出迭代器 (类模板)
ostream_iterator | 写入 std::basic_ostream 的输出迭代器 (类模板)
istream_iterator | 从 std::basic_istream 读取的输入迭代器 (类模板)