HM168 类型参数化交换
HM168 类型参数化交换
来源: 第 168 集 模板-函数模板基本语法
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
为每一种类型各写一个交换函数(swapInt、swapDouble、再写 swapChar、swapString……)会写不完。这些函数的逻辑完全一样,差别只在类型。函数模板把类型也参数化:先声明通用类型 \(T\),使用时再确定它是 int 还是 double。
请用函数模板实现交换,语法为:
template<typename T>
void mySwap(T &a, T &b);
typename 也可以写成 class,效果相同。通用类型习惯叫 T。必须用引用传递,才能改到本体。交换逻辑:用一个 \(T\) 类型的临时变量接住 \(a\),再互相赋值。
函数模板有两种用法:
- 自动类型推导:
mySwap(a, b),编译器根据实参推出 \(T\)。 - 显式指定类型:
mySwap<int>(a, b)或mySwap<double>(a, b),直接告诉编译器 \(T\) 是什么。
对每组数据按指定方式交换两个值并输出。不要为每种类型各抄一份函数体应付。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行:
mode type a b
- \(mode=0\):自动类型推导;\(mode=1\):显式指定类型。
- \(type=0\):两个整数 \(a,b\)(绝对值不超过 \(10^9\))。
- \(type=1\):两个实数 \(a,b\)(小数点后恰好一位,绝对值不超过 \(10^6\))。
输出格式
每组一行,交换后的两个值,中间一个空格。整数按整数输出;实数保留一位小数。行末换行。
样例
输入 #1
4
0 0 10 20
1 0 10 20
0 1 1.1 2.2
1 1 1.1 2.2
输出 #1
20 10
20 10
2.2 1.1
2.2 1.1
输入 #2
2
0 0 -3 8
1 1 0.5 9.0
输出 #2
8 -3
9.0 0.5
说明
- 模板的目的是提高复用,把类型当成参数传入。
- 两种用法都必须能得到交换后的本体,因此形参必须是引用。
- 不要按
mode手写两套互赋逻辑;应实例化同一份函数模板。
信息
- ID
- 1167
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者