游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3945|回复: 8

如何用好find_if() ,以及 operator

[复制链接]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-5-26 21:23:00 | 显示全部楼层 |阅读模式
以下是STL里面的定义


  1. template<class _InIt,
  2.         class _Pr> inline
  3.         _InIt _Find_if(_InIt _First, _InIt _Last, _Pr _Pred)
  4.         {        // find first satisfying _Pred
  5.         _DEBUG_RANGE(_First, _Last);
  6.         _DEBUG_POINTER(_Pred);
  7.         for (; _First != _Last; ++_First)
  8.                 if (_Pred(*_First))
  9.                         break;
  10.         return (_First);
  11.         }
复制代码

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-26 21:42:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

我要用 find_if() ,第三个参数是一个函数指针,于是写了一个 bool 函数,作为_Pred,该函数的参数类型是容器内数据的类型,但为啥老说有错呢。一定要写成 operator 的样式?这个理解不了,怎么写 operator 函数呢……

以下是我自己写的,比较烂啊 [em10]

vecTemp 是一个私有容器 vector<string>



  1. void CVerCount01::wipe_off_num() //作用是把由全数字组成的字符串去掉
  2. {

  3.         vector<string> vec;
  4.         while(  itr = find_if( vecTemp.begin(), vecTemp.end() , CVerCount01::is_all_num ) != vecTemp.end() )
  5.                 vec.push_back( *itr );
  6.         vecTemp.clear();
  7.         copy( vec.begin(), vec.end() , back_inserter( vecTemp ) );
  8. }

  9. bool CVerCount01::isnt_all_num( const string value )
  10.         {       
  11.                 for( int i = 0 ; value[i] != '\0' ; ++i)
  12.                         if( value[i] < '0'|| value[i] > '9' )
  13.                                 return true;
  14.                 return  false;
  15.         }

复制代码

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-5-26 22:05:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

CVerCount01::isnt_all_num( const string value )又不是静态的,当然不可以回调

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-26 22:36:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

照着 less<> 写了一个,不知道对不对

  1.         struct  isnt_all_num
  2.         {       
  3.                 bool operator ()( const string value ) const
  4.                 {
  5.                         for( int i = 0 ; value[i] != '\0' ; ++i)
  6.                                 if( value[i] < '0'|| value[i] > '9' )
  7.                                         return false;
  8.                         return true;
  9.                 }
  10.         };
复制代码

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-26 22:40:00 | 显示全部楼层

Re: Re:如何用好find_if() ,以及 operator

funcman: Re:如何用好find_if() ,以及 operator

CVerCount01::isnt_all_num( const string value )又不是静态的,当然不可以回调


加上 static ?  [em24]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-26 22:46:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

struct  isnt_all_num 还是不能用啊

find_if() 第三个参数该怎么用呢? 恳请路过的各位不惜赐教 T_T

88

主题

166

帖子

302

积分

中级会员

Rank: 3Rank: 3

积分
302
发表于 2007-5-27 08:36:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

struct  isnt_all_num   是可以用的,注意需要先定义变量。
isnt_all_num  var;
find_if(..., var);
或者
find_if(..., isnt_all_num());

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-27 10:41:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

感谢 windforce_cui ,能用了

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-5-27 11:13:00 | 显示全部楼层

Re:如何用好find_if() ,以及 operator

以下,没注释的是find_if()版本,注释的是普通版本 ^_^

  1.         while( find_if( itr , vecTemp.end() , isnt_all_num() ) != vecTemp.end() )
  2.         {
  3.                 vec.push_back( *itr);
  4.                 ++itr;
  5.         }

  6.         //for( ; itr !=  vecTemp.end() ; ++itr)
  7.         //        if( !is_all_num( *itr ) ) //调用 is_all_num ,如果全是数字组成,则返回真
  8.         //                vec.push_back( *itr );
复制代码

[em4] 感觉STL的算法很缥缈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 08:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表