std::remove_if
用于移除自定义可删除的vector元素
其中第三个参数是 返回改元素是否应该被删除,作用有点像std::sort 的自定义比较大小的函数
注意:
1.remove_if 会遍历指定元素区间 ,只是移动元素位置,满足条件的元素可能被覆盖掉,返回可以erase的区 间所以配合erase 就可达到删除目的
2.内部只是移动了 删掉了元素,如果模板类型是对象指针,那么可能 因为erase后 可能导致内存泄露 而 踩坑,这时候还是自己写方便一点,或者直接在回调函数里面添加 对 满足条件的元素的 内存清除的代码
// TEMPLATE FUNCTION remove_if
template<class _FwdIt,
class _Pr> inline
_FwdIt _Remove_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
{ // remove each satisfying _Pred
_FwdIt _Next = _First;
for (++_First; _First != _Last; ++_First)
if (!_Pred(*_First))
*_Next++ = _Move(*_First);
return (_Next);
}
std::vector<char> str;
str.push_back('1');
str.push_back('2');
str.push_back('3');
str.push_back('4');
str.push_back('5');
str.push_back('\0');
cout << &(str[0]) << endl;
str.erase(std::remove_if(str.begin(), str.end(), [](char c)->bool
{
if (c == '2')//自定义条件
{
return true;
}
return false;
}));
cout << &(str[0]) << endl;