ostream_iterator的声明

时间:2013-07-25 07:02:09

标签: c++ iterator

在以下简单程序的编译(gcc Linux)中:

  1 #include <vector>
  2 #include <iostream>
  3 #include <iterator>
  4 #include <algorithm>
  5 using namespace std;
  6
  7 int main()
  8 {
  9         vector<int> numvec;
 10         istream_iterator<int> is;
 11         istream_iterator<int> eof;
 12         is=istream_iterator<int>(cin);
 13         copy(is, eof, back_inserter(numvec));
 14         cout << "Number of values inserted: " << numvec.size() << endl;
 15
 16         ostream_iterator<int> os;
 17         os=ostream_iterator<int>(cout);
 18         copy(numvec.begin(), numvec.end(), os);
 19
 20 }

我收到以下错误:

line 16: error: no matching function for call to 
'std::ostream_iterator<int, char, std::char_traits<char> >::ostream_iterator()'

在不定义ostream_iterator的情况下是否无法声明ostream_iterator? istream_iterator就是这种情况(第10行和第11行)。为什么它对ostream_iterator不起作用?

谢谢

2 个答案:

答案 0 :(得分:2)

没有构造函数可用于ostream_iterator的空参数列表。

ostream_iterator需要basic_ostream<charT,traits>&

但是istream_iterator有一个带有空参数列表的构造函数,它标记了end-of-stream。

  #include <vector>
  #include <iostream>
  #include <iterator>
  #include <algorithm>
  using namespace std;


  int main()
  {
          vector<int> numvec;
          istream_iterator<int> is;
          istream_iterator<int> eof;
          is=istream_iterator<int> (cin);
          copy(is, eof, back_inserter(numvec));
          cout << "Number of values inserted: " << numvec.size() << endl;

          ostream_iterator<int> os(cout);
          os=ostream_iterator<int>(cout); // Not required !

          copy(numvec.begin(), numvec.end(), os);

  }

答案 1 :(得分:0)

只需将其更改为

即可
16         ostream_iterator<int> os(cout);
18         copy(numvec.begin(), numvec.end(), os);

第17行被删除。