## Class template ostream_iterator

hamigaki::ostream_iterator —

最後にデリミタを出力しない`std::ostream_iterator`

## Synopsis

    template<typename T, typename CharT = char,
             typename Traits = std::char_traits<CharT> >
    class ostream_iterator
      :  : public std::iterator<std::output_iterator_tag,void,void,void,void>
    {
    public:
      // types
      typedef CharT                            char_type;
      typedef Traits                           traits_type;
      typedef std::basic_ostream<CharT,Traits> ostream_type;

      // construct/copy/destruct
      explicit ostream_iterator(ostream_type&);
      ostream_iterator(ostream_type&, const CharT*);

      // operators
      ostream_iterator<T,CharT,Traits>& operator=(T);
      ostream_iterator<T,CharT,Traits>& operator*();
      ostream_iterator<T,CharT,Traits>& operator++();

      private: ostream_type* out_stream;
      private: const CharT* delim;
    };

## Description

`hamigaki::ostream_iterator`は、`std::ostream_iterator`改良版である。`std::ostream_iterator`は大変便利であるが、最後の値を出力した後にもデリミタが出力されてしまう。この動作はCSVの出力など多くの状況で好ましくない。`hamigaki::ostream_iterator`はこの問題を解決するためのもであり、１回目の出力の際にはデリミタを出力せず、２回目以降の出力の前にデリミタを出力する。

### `ostream_iterator` construct/copy/destruct

1.     explicit ostream_iterator(ostream_type& s);

   Effects: |
       out_stream = &s;
       delim = 0;

2.     ostream_iterator(ostream_type& s, const CharT* delimiter);

   Effects: |
       out_stream = &s;
       delim = delimiter;

### `ostream_iterator` operators

1.     ostream_iterator<T,CharT,Traits>& operator=(T value);

   Effects: | `delim != 0`かつ初回呼び出しでない場合は`*out_stream << delim`を実行する。その後、`*out_stream << value`を実行する。
   Returns: | `*this`

2.     ostream_iterator<T,CharT,Traits>& operator*();

   Returns: | `*this`

3.     ostream_iterator<T,CharT,Traits>& operator++();

   Returns: | `*this`

| 製作著作 © 2006, 2007 Takeshi Mouri