27 Iterators library [iterators]

27.6 Stream iterators [stream.iterators]

27.6.2 Class template ostream_­iterator [ostream.iterator]

ostream_­iterator записывает (использует operator<<) последовательные элементы в выходной поток, из которого он был построен. Если он был построен с charT* аргументом конструктора, эта строка, называемая a delimiter string, записывается в поток после каждой записи T . Невозможно получить значение из итератора вывода. Его единственное использование - как итератор вывода в таких ситуациях, как

while (first != last)
  *result++ = *first++;

ostream_­iterator определяется как:

namespace std {
  template <class T, class charT = char, class traits = char_traits<charT>>
  class ostream_iterator {
  public:
    using iterator_category = output_iterator_tag;
    using value_type        = void;
    using difference_type   = void;
    using pointer           = void;
    using reference         = void;
    using char_type         = charT;
    using traits_type       = traits;
    using ostream_type      = basic_ostream<charT,traits>;

    ostream_iterator(ostream_type& s);
    ostream_iterator(ostream_type& s, const charT* delimiter);
    ostream_iterator(const ostream_iterator& x);
    ~ostream_iterator();
    ostream_iterator& operator=(const T& value);

    ostream_iterator& operator*();
    ostream_iterator& operator++();
    ostream_iterator& operator++(int);
  private:
    basic_ostream<charT,traits>* out_stream;  // exposition only
    const charT* delim;                       // exposition only
  };
}

27.6.2.1 ostream_­iterator constructors and destructor [ostream.iterator.cons.des]

ostream_iterator(ostream_type& s);

Effects: Инициализацию out_­stream с addressof(s) и delim с нулем.

ostream_iterator(ostream_type& s, const charT* delimiter);

Effects: Инициализируется out_­stream с помощью addressof(s) и delim с помощью delimiter.

ostream_iterator(const ostream_iterator& x);

Effects: Создает копию x.

~ostream_iterator();

Effects: Итератор уничтожен.

27.6.2.2 ostream_­iterator operations [ostream.iterator.ops]

ostream_iterator& operator=(const T& value);

Effects: Как будто по:

*out_stream << value;
if (delim != 0)
  *out_stream << delim;
return *this;

ostream_iterator& operator*();

Returns: *this.

ostream_iterator& operator++(); ostream_iterator& operator++(int);

Returns: *this.