HM237 仿函数三技

HM237 仿函数三技

HM237 仿函数三技

来源: 第 237 集 函数对象-函数对象基本使用

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

函数对象(也叫仿函数)是**重载了函数调用运算符** operator() 的类所创建的对象。它用起来很像函数,但本质是类的对象,并不是真正的函数。写法很灵活:参数个数、返回值类型都可以按需要定,没有固定模板。

它有三点必须掌握:

  1. 像普通函数那样调用,可以有参数、有返回值。例如加法仿函数接收两个整数并返回它们的和。
  2. 可以拥有自己的状态。因为本质是类,内部可以放成员变量。例如打印仿函数用 count 记录自己被调用了多少次。普通函数没有成员,只能靠全局变量或静态变量借助外力计数。
  3. 可以作为参数传进另一个函数。接收方按引用拿到函数对象后,仍可用 对象(实参) 的方式调用。

请实现加法仿函数与带计数的打印仿函数,并写一个派发函数,按引用接收打印仿函数和待打印字符串。先做 \(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
通过率
?
上传者