读书人

【Qamp;A】除了stl vector中特定位置的多

发布时间: 2012-09-21 15:47:26 作者: rapoo

【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. 上一篇软文方法,实际上把库函数根据自己需要实现了一下,需要辅助存储空间,不过不局限于等于语义,稍灵活。


先写到这里。


读书人网 >编程

热点推荐