c++编程练习 039:我自己的 ostream_iterator

北大程序设计与算法(三)测验题汇总(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) { }
  1. 下列代码根据已有代码可知,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;}

这儿就是最直接的答案,当然=重载时,此处并没有返回对象,因为个人觉得没必要。若要返回,也只能返回对象的引用。

发布了205 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/104418810
今日推荐