類模板
<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; }
};

另見