【Q&A】去除stl vector中特定位置的多个元素续_remove算法初探
这个是上一篇“去除stl vector中特定位置的多个元素”姊妹篇,有网友建议我用一下算法库中的remove和vector的函数erase。实现了一下,代码如下:
// TEMPLATE FUNCTION remove_copytemplate<class _InIt,class _OutIt,class _Ty> inline_OutIt _Remove_copy(_InIt _First, _InIt _Last,_OutIt _Dest, const _Ty& _Val, _Range_checked_iterator_tag){// copy omitting each matching _Val_DEBUG_RANGE(_First, _Last);_DEBUG_POINTER(_Dest);for (; _First != _Last; ++_First)if (!(*_First == _Val)) // 不知道这里为什么不用“!=”直接判断?*_Dest++ = *_First;return (_Dest);}
基本原理同我们上一篇中的一样,不过写的更加简洁。算法时间复杂度也是O(n),不过没有用辅助存储空间。
总结一下,对比两种方法:
1. 算法时间复杂度都是O(n),不过remove+erase方法代码简洁,并且没有用辅助存储空间效率更高;不过只方便对“等于”语义的元素做过滤,并且需要显示定义等于语义,灵活度有待商榷。
2. 上一篇软文方法,实际上把库函数根据自己需要实现了一下,需要辅助存储空间,不过不局限于等于语义,稍灵活。
先写到这里。