描述
程序填空输出指定结果
#include
#include
#include
using namespace std;
template <class T1,class T2>
void Copy(T1 s,T1 e, T2 x)
{
for(; s != e; ++s,++x)
*x = *s;
}
template<class T>
class myostream_iteraotr
{
// 在此处补充你的代码
};
int main()
{ const int SIZE = 5;
int a[SIZE] = {5,21,14,2,3};
double b[SIZE] = { 1.4, 5.56,3.2,98.3,3.3};
list<int> lst(a,a+SIZE);
myostream_iteraotr<int> output(cout,",");
Copy( lst.begin(),lst.end(),output);
cout << endl;
myostream_iteraotr<double> output2(cout,"--");
Copy(b,b+SIZE,output2);
return 0;
}
输入
无
输出
5,21,14,2,3,
1.4--5.56--3.2--98.3--3.3--
分析main函数
int main()
{ const int SIZE = 5;
int a[SIZE] = {5,21,14,2,3};
double b[SIZE] = { 1.4, 5.56,3.2,98.3,3.3};
list<int> lst(a,a+SIZE);
myostream_iteraotr<int> output(cout,","); //构造函数
Copy( lst.begin(),lst.end(),output); //lst copy到output
cout << endl;
myostream_iteraotr<double> output2(cout,"--");
Copy(b,b+SIZE,output2); //b copy到output2
return 0;
}
构造函数的形参(ostream & o, string s)
在copy中完成对output的输出
则看copy函数
void Copy(T1 s,T1 e, T2 x)
{
for(; s != e; ++s,++x) //重构++x
*x = *s; //重载*x //重载=
}
需要重载++();
需要重载*();
需要重载=(T &s );
故完整的代码为
#include
#include
#include
using namespace std;
template <class T1,class T2>
void Copy(T1 s,T1 e, T2 x)
{
for(; s != e; ++s,++x) //重构++x
*x = *s; //重载*x //重载=
}
template<class T>
class myostream_iteraotr
{
// 在此处补充你的代码
string s;
ostream &o; //引用
public:
myostream_iteraotr(ostream & o_,string s_): o(o_),s(s_){} //构造函数
myostream_iteraotr & operator ++() {} //无用
myostream_iteraotr & operator *(){ return *this;} //返回当前对象
myostream_iteraotr & operator =(const T & t) //在=时输出赋予的值,引用可以减少复制耗费的时间
{
o << t << s;
return * this;
}
//
};
int main()
{ const int SIZE = 5;
int a[SIZE] = {5,21,14,2,3};
double b[SIZE] = { 1.4, 5.56,3.2,98.3,3.3};
list<int> lst(a,a+SIZE); //a放入lst
myostream_iteraotr<int> output(cout,","); //这是一个构造函数
Copy( lst.begin(),lst.end(),output); //lst copy到output
cout << endl;
myostream_iteraotr<double> output2(cout,"--");
Copy(b,b+SIZE,output2); //b copy到output2
return 0;
}