A:goodcopy
描述
编写GoodCopy类模板,使得程序按指定方式输出
|
|
输入
第一行是整数 t,表示数据组数
每组数据:
第一行是整数 n , n < 50
第二行是 n 个整数
第三行是 n 个字符串
输出
将输入的整数原序输出两次,用",“分隔
然后将输入的字符串原序输出两次,也用 “,“分隔
样例输入
|
|
样例输出
|
|
Solution
我们定义了一个GoodCopy类(结构体,不用管public,自动public的),然后这个类用于生成一个函数(看下面)
所以,只需要处理好迭代器的顺序,要从后往前,不然重叠的那块会先被迭代掉
下面看代码:
|
|
B:按距离排序
描述
程序填空,输出指定结果
|
|
输入
多组数据,每组一行,是一个整数n和一个字符串s
输出
定义两个整数的距离为两个整数差的绝对值
定义两个字符串的距离为两个字符串长度差的绝对值
对每组数据:
对数组a按和n的距离从小到大排序后输出。距离相同的,值小的排在前面。
然后对数组b,按照和s的距离从小到大输出。距离相同的,字典序小的排在前面
样例输入
|
|
样例输出
|
|
Solution
这里可以看到,Closer生成了一个匿名对象,用于sort的比较器
这个匿名对象函数,肯定是需要接受两个对象,然后判断这两个对象从而给出一个bool对象
不过,在本题中,这两个对象还需要通过引用原有函数进行进一步比较,上面的两个模板也暗示了我们,一个应该是题目所需的距离,另一个应该是判断函数
这样就理得很清楚了
|
|
C:很难蒙混过关的CArray3D三维数组模板类
描述
实现一个三维数组模版CArray3D,可以用来生成元素为任意类型变量的三维数组,输出指定结果
|
|
输入
|
|
输出
|
|
样例输入
|
|
样例输出
|
|
提示
建议做法:
- a[i][j][k] 这个表达式的第一个[]返回一个内部类的对象,该内部类也重载了[],且返回值为指针。
- 必要时需重载对象到指针的强制类型转换运算符
Solution
这题是重头戏!
感觉跟我之前写的那个,二元数组的实现有点像,这里我主要解释一下吧
首先肯定要有三维的数据和一个T* 指针,分配出[x*y*z]大小的空间
然后,考虑降维
我们肯定要重载[]这个函数,而根据题目提示,最后一个[]直接从T类变成T类了,所以只要在三维和二维各自重载一个[]就好
然后,为什么要写这个operator T*呢?
我们为了迎合memset,要把CArray2D这个类转换成T 类,从而完成任务!
下面看代码:
|
|
D:函数对象的过滤器
描述
程序填空输出指定结果
|
|
输入
多组数据
每组数据两行
第一行是两个整数 m 和 n
第二行先是一个整数k ,然后后面跟着k个整数
输出
对每组数据,按原顺序输出第二行的后k个整数中,大于m且小于n的数 输出两遍 数据保证一定能找到符合要求的整数
样例输入
|
|
样例输出
|
|
Solution
本题需要我们实现一个FilterClass类,这个类,跟第二题差不多,还是生成一个op判断函数,那就完事了,只不过接收变量从一个变成两个了而已
|
|
E:白给的list排序
描述
程序填空,产生指定输出
|
|
输入
|
|
输出
|
|
样例输入
|
|
样例输出
|
|
Solution
这道题,就是考察课件内容
五一还需要好好地把课件内容过一遍
STL中给我们定义了一个比较函数
greater<数据类型>()
这个函数自动实现降序比较 那就完事了
|
|
F:我自己的ostream_iterator
描述
程序填空输出指定结果
|
|
输入
|
|
输出
|
|
样例输入
|
|
样例输出
|
|
Solution
上次不是有个“山寨的istream_iterator”这道题嘛,提醒我们要去参考STL的原装代码
然后我就去看了一下
|
|
到这里一切都很明朗了,事实上本来就只需要重载’++’、’*‘和’=‘三个符号,无非是重载方式调一下而已
下面看代码:
|
|