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;