您的位置:首页 > 其它

STL find_if应用及其他

2016-03-08 16:35 381 查看
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++;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: