① 源码
template <class _FwdIt, class _Pr, class _Ty>
_CONSTEXPR20 void replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val) {
// replace each satisfying _Pred with _Val
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
for (; _UFirst != _ULast; ++_UFirst) {
if (_Pred(*_UFirst)) {
*_UFirst = _Val;
}
}
}
② 函数简写
template <class _FwdIt, class _Pr, class _Ty>
void replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val);
③ 作用
将 STL 容器中 _First 至 _Last 区间内所有满足函数 _Pred 逻辑的元素更改为元素 _Val 。
④ 使用示例:筛选容器中值小于 10 的元素,将其值更换为 1000 .
// 筛选值小于 10 的元素
// 仿函数做条件
class Less30_A
{
public:
bool operator()(int val)const
{
return val < 30;
}
};
// 普通函数做条件
bool Less30_B(int val)
{
return val < 30;
}
------------------------------------
vector<int> v { 10, 30, 10, 30 };
// 将值小于 10 的元素更换为 1000 .
replace_if(v.begin(), v.end(), Less30_A(), 1000); // 仿函数
replace_if(v.begin(), v.end(), Less30_B, 1000); // 普通函数
// 容器 v 中元素变为 { 1000, 30, 1000, 30 } .