hamigaki.png

前のページ 上に戻る ホーム 次のページ

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はこの問題を解決するためのもであり、1回目の出力の際にはデリミタを出力せず、2回目以降の出力の前にデリミタを出力する。

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-2008 Takeshi Mouri

前のページ 上に戻る ホーム 次のページ