std::remove_if

梦想游戏人
目录:
C/C++

用于移除自定义可删除的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;
Scroll Up