_Find_pr()算法比较简单,它的作用是将容器中的值与传入值作对比处理,可以先看下算法的定义:
// TEMPLATE FUNCTION _Find_pr WITH PRED
template<class _InIt,
class _Ty,
class _Pr> inline
_InIt _Find_pr(_InIt _First, _InIt _Last, const _Ty& _Val, _Pr _Pred)
{ // find first matching _Val, using _Pred
for (; _First != _Last; ++_First)
if (_Pred(*_First, _Val))
break;
return (_First);
}
算法的参数为容器的头迭代器,尾迭代器,传入值与仿函数,我们一般想做这种对比都会想到find()算法,它的实现方式为
template<class _InIt,
class _Ty> inline
_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val, false_type)
{ // find first matching _Val
for (; _First != _Last; ++_First)
if (*_First == _Val)
break;
return (_First);
}
方法为遍历容器,当容器的值为指定值时,返回当前迭代器指针。
可见_Find_pr()顾名思义就是find函数的仿函数版本
下面做个演示
Bend = _Find_pr(booksRecord_.begin(), booksRecord_.end(), bc,
[](Books* right, int BC) {
if ((right->GetbooksCode()) == (BC)) {
return 1;
}
return 0;
});