HM168 类型参数化交换

HM168 类型参数化交换

HM168 类型参数化交换

来源: 第 168 集 模板-函数模板基本语法

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

为每一种类型各写一个交换函数(swapIntswapDouble、再写 swapCharswapString……)会写不完。这些函数的逻辑完全一样,差别只在类型。函数模板把类型也参数化:先声明通用类型 \(T\),使用时再确定它是 int 还是 double

请用函数模板实现交换,语法为:

template<typename T>
void mySwap(T &a, T &b);

typename 也可以写成 class,效果相同。通用类型习惯叫 T。必须用引用传递,才能改到本体。交换逻辑:用一个 \(T\) 类型的临时变量接住 \(a\),再互相赋值。

函数模板有两种用法:

  1. 自动类型推导mySwap(a, b),编译器根据实参推出 \(T\)。
  2. 显式指定类型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
通过率
?
上传者