模板函数问题2

yinshuli 2008-10-07 07:14:43
#include<iostream.h>

template <class Type, int size>
Type min( Type (&r_array)[size] )
{
Type min_val = r_array[0];
for ( int i = 1; i < size; ++i )
if ( r_array[i] < min_val )
min_val = r_array[i];
return min_val;
}
// size 没有指定——ok
// size = 初始化表中的值的个数
int ia[] = { 10, 7, 14, 3, 25 };
double da[6] = { 10.2, 7.1, 14.5, 3.2, 25.0, 16.8 };


int main()
{
// 为5 个int 的数组实例化min()
// Type => int, size => 5
int minimum1 = min( ia );
if ( minimum1 != 3 )
cout << "warning: integer min() failed\n";
else
cout << "ok: integer min() worked\n"
<<"The minimum is:"<<minimum1<<endl;

// 为 6 个 double 的数组实例化 min()
// Type => double, size => 6
double minimum2 = min( da );
if ( minimum2 != 3.2 )
cout << "warning: double min() failed\n";
else
cout << "ok: double min() worked\n"
<<"The minimum is:"<<minimum2<<endl;;
return 0;
}
这个模板函数算是刚才那个的一个变形,但这个怎么不对呢,谢谢指点
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjb_yd 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fallening 的回复:]
C/C++ code
template <class Type, int size>
Type min( Type (&r_array)[size] )
{
Type min_val = r_array[0];
for ( int i = 1; i < size; ++i )
if ( r_array[i] < min_val )
min_val = r_array[i];
return min_val;
}


没问题

问题在于:

C/C++ codeif ( minimum2 != 3.2 )


long double 类型数据不可这样比较
当用


C/C++ codeconst long double acc = 1E-6L;
if ( fabs(minum2-3.2)<a…
[/Quote]

说到点子上了
tzg_dzq 2008-10-07
  • 打赏
  • 举报
回复
double da[6] = { 10.2, 7.1, 14.5, 3.2, 25.0, 16.8 };

template <class Type, int size>
Type min( Type (&r_array)[size] )
{
Type min_val = r_array[0];
for ( int i = 1; i < size; ++i )
if ( r_array[i] < min_val ) //问题一:若type是double则不能用次条语句
min_val = r_array[i];
return min_val;
}

double minimum2 = min( da );

if ( minimum2 != 3.2 ) //问题二:double型不要比较大小
jia_xiaoxin 2008-10-07
  • 打赏
  • 举报
回复
模板的使用没有问题
fallening 2008-10-07
  • 打赏
  • 举报
回复

template <class Type, int size>
Type min( Type (&r_array)[size] )
{
Type min_val = r_array[0];
for ( int i = 1; i < size; ++i )
if ( r_array[i] < min_val )
min_val = r_array[i];
return min_val;
}

没问题

问题在于:
if ( minimum2 != 3.2 ) 

long double 类型数据不可这样比较
当用

const long double acc = 1E-6L;
if ( fabs(minum2-3.2)<acc)
...

开心爸爸84 2008-10-07
  • 打赏
  • 举报
回复
给个链接吧,你“刚才的问题”是什么啊 ?
MagiSu 2008-10-07
  • 打赏
  • 举报
回复
什么bug说说
onlinewan 2008-10-07
  • 打赏
  • 举报
回复
你的程序没有问题

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧