类模板
<iterator>

std::ostream_iterator

template <class T, class charT=char, class traits=char_traits<charT> >  class ostream_iterator;
输出流迭代器

Ostream 迭代器是 输出迭代器,它们按顺序写入输出流(如 cout)。

它们通过 basic_ostream 对象构造,并与之关联,这样每当在(已解引用或未解引用的) ostream_iterator 上使用赋值运算符(=)时,它就会将新元素插入流中。

在构造时,还可以选择指定一个 *分隔符*。此分隔符在插入每个元素后写入流。

模板参数

T
迭代器的元素类型:插入流的元素的类型
charT
关联的 basic_ostream 对象的第一个模板参数:流处理的元素类型(ostreamchar)。
特性 (traits)
关联的 basic_ostream 的第二个模板参数:流处理的元素的 字符特性
注意:默认模板参数对应于使用 ostream 对象作为关联流的实例化。

成员类型

成员定义在 istream_iterator描述
ostream_typebasic_ostream<charT,traits>关联输出流的类型
iterator_categoryoutput_iterator_tag输入迭代器
value_typevoid
char_typecharT关联流处理的字符类型
traits_type特性 (traits)关联流的 字符特性
difference_typevoid
指针void
引用void

成员函数


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ostream_iterator example
#include <iostream>     // std::cout
#include <iterator>     // std::ostream_iterator
#include <vector>       // std::vector
#include <algorithm>    // std::copy

int main () {
  std::vector<int> myvector;
  for (int i=1; i<10; ++i) myvector.push_back(i*10);

  std::ostream_iterator<int> out_it (std::cout,", ");
  std::copy ( myvector.begin(), myvector.end(), out_it );
  return 0;
}

可能的输出

10, 20, 30, 40, 50, 60, 70, 80, 90, 


可能的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
template <class T, class charT=char, class traits=char_traits<charT> >
  class ostream_iterator :
    public iterator<output_iterator_tag, void, void, void, void>
{
  basic_ostream<charT,traits>* out_stream;
  const charT* delim;

public:
  typedef charT char_type;
  typedef traits traits_type;
  typedef basic_ostream<charT,traits> ostream_type;
  ostream_iterator(ostream_type& s) : out_stream(&s), delim(0) {}
  ostream_iterator(ostream_type& s, const charT* delimiter)
    : out_stream(&s), delim(delimiter) { }
  ostream_iterator(const ostream_iterator<T,charT,traits>& x)
    : out_stream(x.out_stream), delim(x.delim) {}
  ~ostream_iterator() {}

  ostream_iterator<T,charT,traits>& operator= (const T& value) {
    *out_stream << value;
    if (delim!=0) *out_stream << delim;
    return *this;
  }

  ostream_iterator<T,charT,traits>& operator*() { return *this; }
  ostream_iterator<T,charT,traits>& operator++() { return *this; }
  ostream_iterator<T,charT,traits>& operator++(int) { return *this; }
};

另见