HM237 仿函数三技
HM237 仿函数三技
来源: 第 237 集 函数对象-函数对象基本使用
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
函数对象(也叫仿函数)是**重载了函数调用运算符** operator() 的类所创建的对象。它用起来很像函数,但本质是类的对象,并不是真正的函数。写法很灵活:参数个数、返回值类型都可以按需要定,没有固定模板。
它有三点必须掌握:
- 像普通函数那样调用,可以有参数、有返回值。例如加法仿函数接收两个整数并返回它们的和。
- 可以拥有自己的状态。因为本质是类,内部可以放成员变量。例如打印仿函数用
count记录自己被调用了多少次。普通函数没有成员,只能靠全局变量或静态变量借助外力计数。 - 可以作为参数传进另一个函数。接收方按引用拿到函数对象后,仍可用
对象(实参)的方式调用。
请实现加法仿函数与带计数的打印仿函数,并写一个派发函数,按引用接收打印仿函数和待打印字符串。先做 \(n\) 次加法;再用**同一个**打印对象打印 \(m\) 个字符串并输出此时的调用次数;最后把该对象交给派发函数再打印 \(k\) 个字符串,并输出累计调用次数。
输入格式
第一行一个整数 \(n\)。
接下来 \(n\) 行,每行两个整数 \(a, b\),交给加法仿函数求 \(a+b\)。
下一行一个整数 \(m\)。
下一行 \(m\) 个不含空白的字符串。当 \(m=0\) 时本行可以是空行。
下一行一个整数 \(k\)。
下一行 \(k\) 个不含空白的字符串。当 \(k=0\) 时本行可以是空行。
输出格式
先输出 \(n\) 行,每行一个加法结果。
再输出 \(m\) 行,每行一个被打印的字符串。
再输出一行整数:打印仿函数此时的调用次数。
再输出 \(k\) 行,每行一个由派发函数打印的字符串。
最后输出一行整数:打印仿函数的累计调用次数。
样例
输入 #1
2
10 10
3 7
3
hello world foo
1
Cpp
输出 #1
20
10
hello
world
foo
3
Cpp
4
输入 #2
1
-5 8
0
2
A B
输出 #2
3
0
A
B
2
说明
\(0 \le n, m, k \le 1000\),加减法操作数绝对值不超过 \(10^9\),每个字符串长度 \(1\sim 20\)。
样例 #1:加法仿函数算出 \(10+10=20\)、\(3+7=10\)。打印对象先调用 3 次,次数为 3;再经派发函数调用 1 次,累计 4。样例 #2 中 \(m=0\),第一次统计次数为 0,状态仍保留在同一个对象上。
信息
- ID
- 1236
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者