1.写一个 CMyostream_iterator 模板, 使之能和 ostream_iterator 模板达到一样的效果
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 在此处补充你的代码
template<class T>
class CMyostream_iterator:public iterator<output_iterator_tag,T>{
private:
ostream &o;
const char* s;
public:
CMyostream_iterator(ostream & output,const char* sz):o(output),s(sz){}
void operator++(){};
void operator=(const T& val){o<<val<<s;}
CMyostream_iterator &operator*(){return *this;}
};
int main()
{
int a[]={1,2,3,4,5};
CMyostream_iterator<int> output(cout,"*");
vector<int> v(a,a+5);
copy(v.begin(),v.end(),output);
return 0;
}
执行效果:
2.写一个CMyistream_iterator 模板,使之能和 istream_iterator 模板达到一样的效果
template <class T>
class CMyistream_iterator:public iterator<input_iterator_tag,T>{
private:
T a;
istream &is;
public:
CMyistream_iterator(istream &iss):is(iss){is>>a;}
void operator++(int)
{
is>>a;
}
T operator*(){return a;}
};
测试代码:
int main()
{
CMyistream_iterator<int> inputInt(cin);
int n1,n2,n3;
n1 = * inputInt; //读入 n1
int tmp = * inputInt;
cout << tmp << endl;
inputInt ++;
n2 = * inputInt; //读入 n2
inputInt ++;
n3 = * inputInt; //读入 n3
cout << n1 << "," << n2<< "," << n3 << endl;
CMyistream_iterator<string> inputStr(cin);
string s1,s2;
s1 = * inputStr;
inputStr ++;
s2 = * inputStr;
cout << s1 << "," << s2 << endl;
return 0;
}
测试结果:
来自北京大学MOOC课件