我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合公式 > 仿函数 >

stl find()???

归档日期:07-21       文本归类:仿函数      文章编辑:爱尚语录

  我定义了一个结构数组里面有两个int型变量,我想用stl中的find()函数来查找某一个数比如:structmy_struct{inta;intb;};我想查找a=100的数,怎么办,请大侠帮帮忙如果数组里面有好几个...

  我定义了一个结构数组里面有两个int型变量,我想用stl中的find()函数来查找某一个数

  如果数组里面有好几个a=100的元素,怎样把他们都找出来???展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部find()只能找出与之匹配的第一个元素的地址,而且find()中的参数只能是整个元素(如find(100)//整型,find(my)//my_struct类型

  其中用了两个function object,分别是等于与不等于目标值。本来写一个就行了,第二个用not1(),但是我写的函数对象不是模板类,所以不能用(visual studio 2008)。 之所以将函数对象定义为非模板类,是由于其中的my_struct是定了的(要用到:my_struct::a),int也是定了的,没有必要定义为模板类。代码中的变量名意思不明确,输出结果时没有提示,请见谅!

  补充:我楼底下的那位(现在在我楼上了)写的辅助函数bool pred()代码重用性太差,只能让my_struct.a 跟100比。那么我同时想跟100, 20, 123,1000,...等都比较呢,你不能每个都编一个对应的函数啊,所以在这里,仿函数(functor)又叫函数对象(function object)就很有用,正如我上面的my_equal_to(num)只要将num换成20,100...等就都解决了!function object 在泛型编程中的地位不可小觑!还有他编的的那个find_all()函数也存在上面提到的问题,既然标准库里有函数remove_copy_if等可以实现你要的结果,为什么要自己编效率低的代码呢?调用函数(pred(),push_back())的开销可不小哦!指针少用点,出错率高(不好看懂),用迭代代替吧!

本文链接:http://renfriends.com/fanghanshu/751.html