在编译以下简单程序(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而不定义它吗?istream_iterator就是这种情况(第10和第11行)。为什么它不适用于ostream_iterator?
谢谢
发布于 2013-07-25 07:15:40
空参数列表的迭代器没有可用的构造函数。
ostream_iterator需要一个basic_ostream<charT,traits>&
然而,迭代器有一个带有空参数列表的构造函数,该构造函数标记流结束。
#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);
}发布于 2013-07-25 07:09:02
只要把它改成
16 ostream_iterator<int> os(cout);
18 copy(numvec.begin(), numvec.end(), os);第17行被删除.
https://stackoverflow.com/questions/17851166
复制相似问题