泛型算法中浮点数的比较

hldc 2007-11-10 12:09:18
我在看C++ Prime第三版,请问一下,在泛型算法中,有一个find()函数:

template<class ForwardIterator,class Type>
ForwardIterator find(ForwardIterator first,ForwardIterator last,Type value)
{
for(;first!=last;++first)
if(value==*first; //此时若value为浮点数还正确吗?在C中对浮点数比较不能直接用==
return first;
return last;
}

...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
loops 2007-11-10
  • 打赏
  • 举报
回复
偏特化行吗?find里面貌似没有调用什么equal_to等等functor,而内置类型的operator==是无法重载的。
星羽 2007-11-10
  • 打赏
  • 举报
回复
可以,不过你最好用

if(fabs(value - *first) < FLT_EPSILON)
hldc 2007-11-10
  • 打赏
  • 举报
回复
晕,少打个“)”

template<class ForwardIterator,class Type>
ForwardIterator find(ForwardIterator first,ForwardIterator last,Type value)
{
for(;first!=last;++first)
if(value==*first); //此时若value为浮点数还正确吗?在C中对浮点数比较不能直接用==
return first;
return last;
}
opengl3d 2007-11-10
  • 打赏
  • 举报
回复
1,可以使用偏特化或
2,find_if,提供比较仿函数
zhangyanli 2007-11-10
  • 打赏
  • 举报
回复
find_if,提供比较函数.
loops 2007-11-10
  • 打赏
  • 举报
回复
find当然不会正确找到浮点数了,你要用find_if,自己提供一个比较函数才行。
iambic 2007-11-10
  • 打赏
  • 举报
回复
find_if
iambic 2007-11-10
  • 打赏
  • 举报
回复
不确定你想问什么。find()浮点数自己提供一个比较器就可以了。
hldc 2007-11-10
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
float f=3.2;
if(f==3.2)
cout<< "f==3.2";
else
cout<< "f!=3.2";
cout<<endl;
getchar();
return 0;
}


最后打印出来:f!=3.2,这里看来浮点数不能直接”==“,泛型算法中难道对==进行了重载?
ryfdizuo 2007-11-10
  • 打赏
  • 举报
回复
如楼上所说, 浮点型的比较最好用差值概念, 就是说当两浮点数差值小于某个很小的常熟时候,就可以认为他们相等了,
hldc 2007-11-10
  • 打赏
  • 举报
回复
这段代码是书上的,我再找找看。

64,646

社区成员

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

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