STL find_if应用及其他

来源:互联网 发布:js视频广告广告代码 编辑:程序博客网 时间:2024/05/23 16:41

1.find()

template<class InputIterator, class T>  

   InputIterator find ( InputIterator first, InputIterator last, const T& value )  

   {  

     for ( ;first!=last; first++) if ( *first==value ) break;  

     return first;  

   }  

2.find_if()

InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )  

{  

   for ( ; first!=last ; first++ ) if ( pred(*first) ) break;  

   return first;  

 }  

3.find_if例子1

 struct STU{  

     int age;  

     int hight;  

     bool sex;  

};  

 bool GetAge(STU s)  

 {  

if (s.age==2)  

       {  

         return true;  

     }  

     return false;  

 }  


     vector<STU> vec;  

    STU a,b,c;  

     a.age=1;  

     a.hight=1;  

    a.sex=1;  

     b.age=2;  

     b.hight=2;  

     b.sex=2;  

     c.age=3;  

     c.hight=3;  

     c.sex=3;  

     vec.push_back(a);  

     vec.push_back(b);  

     vec.push_back(c);  

   

     vector<STU>::iterator it = std::find_if(vec.begin(),vec.end(),GetAge);  

     if (it!=vec.end())  

     {  

         printf("age=%d\n",it->age);  

     }  


3.find_if例子2

class __IsEqual
{
friend class KUiSign;
public:
bool operator () (const SignRewardInfo & R)
{
return R.nIndex == m_nIndex;
}
private:
explicit __IsEqual(int nIndex)
{
m_nIndex = nIndex;
}
int m_nIndex;
};

struct SignRewardInfo
{
int nIndex;
int nNeedDays;

}

typedef std::vector<SignRewardInfo>SignRewardVector;

int nId =10;

__IsEqual equal(nId);
SignRewardVector::iterator iter = std::find_if(m_vecPileReward.begin(), m_vecPileReward.end(), equal);


#inluce<map>

#include<string>

int _tmain(int argc, _TCHAR* argv[])
{
multimap <string ,int> m;//multimap的创建
m.insert(pair<string,int>("Jack",1));//插入
m.insert(pair<string,int>("Jack",2));
m.insert(pair<string,int>("Body",1));
m.insert(pair<string,int>("Navy",4));
//m.insert(pair<string,int>("Demo",3));


multimap<string,int>::iterator iter;
for (iter = m.begin();iter != m.end();++iter)//遍历
{
cout<<(*iter).first<<"  "<<(*iter).second<<endl;
}
m.erase("Navy");//multimap的删除
cout<<"The element after delete:"<<endl;
for (iter = m.begin();iter != m.end();++iter)
{
cout<<(*iter).first<<"  "<<(*iter).second<<endl;
}
//multimap元素的查找 
multimap<string,int>::iterator it;
int num=m.count("Jack");
it = m.find("Jack");
cout<<"the search result is :"<<endl;
for(int i=1;i<=num;i++)
{
cout<<it->first<<"  "<<it->second<<endl;
it++;
}
cout<<m.empty()<<endl;
if (!m.empty())
{
cout<<m.size()<<endl;

}

return 0;

}


服务器的使用(linux下)

for (LimitAttrList::iterator iter = temp.begin(); iter != temp.end();)
{
int  nBaseId = m_Helper.GetBaseIdBySpecialID(*iter);
bool bHaveBase= false;
for (int i = 0; i < MAX_BASE_PROPERTY_NUM; ++i)
{
if ( pBaseProp[i].nPropertyID == nBaseId )
{
bHaveBase = true;
}
}


// 如果基础属性里没有 对应 特殊属性 即     基础属性+5攻击  而特殊属性是+5%防御  不匹配
if (!bHaveBase)
{
iter = temp.erase(iter);
}
else
{
iter++;
}
}

0 0