北大程序设计与算法(三)测验题汇总(2020春季)
描述
程序填空输出指定结果
#include <iostream>
#include <list>
#include <string>
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–
样例输入
无
样例输出
同输入
来源
Guo Wei
分析
这后面的咋这么多叫我们模拟已经定好的模板的实现呢?
这儿就是ostream_iteraotr
的定义实现,熟悉这个更好做这个题,不熟悉,也没有关系,来一步一步分析:
1.
myostream_iteraotr<int> output(cout,",");
这人告诉我们类中的两个参数
template<class T>
class myostream_iteraotr
{
private:
ostream & out;
string str;
public:
myostream_iteraotr( ostream & _out, const string & _str):out(_out),sep(str) { }
- 下列代码根据已有代码可知,
T2
其实就是类myostream_iteraotr
与*x = *s;
告诉我们这儿需要重载++
与=
,还有*()
,
template <class T1,class T2>
void Copy(T1 s,T1 e, T2 x)
{
for(; s != e; ++s,++x)
*x = *s;
}
那么可得
operator ++() { }
myostream_iteraotr & operator *() { return * this;}
operator =(const T & t) { o << t << sep;}
这儿就是最直接的答案,当然=
重载时,此处并没有返回对象,因为个人觉得没必要。若要返回,也只能返回对象的引用。