函数题:绝对值函数模板*
请设计求对象绝对值的函数模板。
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b;
cin >> a;
b = Abs(a);
cout << b << endl;
return 0;
}
#### 输入样例1
in
37
#### 输出样例1
out
37
#### 输入样例2
in
-37
#### 输出样例2
out
37
提示:运用条件运算符(?:),写出高效的代码。
答案:若无答案欢迎评论
首先看下面的模板
c++
template <typename TYPE>
TYPE Abs(TYPE x)
{
return x >= 0 ? x : -x;
}
函数的参数是对象,将会执行拷贝构造函数和析构函数。
再看下面的模板
c++
template <typename TYPE>
TYPE Abs(TYPE &x)
{
return x >= 0 ? x : -x;
}
函数的参数是引用,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。
而对于下面的模板
c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x > 0 ? x : -x;
}
若数据类型为实型(float 或 double),则存在负零问题。当 x 为零时,函数值为 -x (负零),将输出 -0。
因此,正确答案应该是:
c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x >= 0 ? x : -x;
}
#include <iostream>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int a, b;
cin >> a;
b = Abs(a);
cout << b << endl;
return 0;
}
#### 输入样例1
in
37
#### 输出样例1
out
37
#### 输入样例2
in
-37
#### 输出样例2
out
37
提示:运用条件运算符(?:),写出高效的代码。
答案:若无答案欢迎评论
首先看下面的模板
c++
template <typename TYPE>
TYPE Abs(TYPE x)
{
return x >= 0 ? x : -x;
}
函数的参数是对象,将会执行拷贝构造函数和析构函数。
再看下面的模板
c++
template <typename TYPE>
TYPE Abs(TYPE &x)
{
return x >= 0 ? x : -x;
}
函数的参数是引用,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。
而对于下面的模板
c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x > 0 ? x : -x;
}
若数据类型为实型(float 或 double),则存在负零问题。当 x 为零时,函数值为 -x (负零),将输出 -0。
因此,正确答案应该是:
c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x >= 0 ? x : -x;
}