求remove_if逻辑处理过程,数据如何移动的?
求remove_if逻辑处理过程,数据如何移动的?
[解决办法]
g++的实现,当然得移动元素了。
- C/C++ code
template<typename _InputIterator, typename _OutputIterator, typename _Predicate> _OutputIterator remove_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) { for ( ; __first != __last; ++__first) if (!__pred(*__first)) { *__result = *__first; ++__result; } return __result; } template<typename _ForwardIterator, typename _Predicate> _ForwardIterator remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { __first = std::find_if(__first, __last, __pred); _ForwardIterator __i = __first; return __first == __last ? __first : std::remove_copy_if(++__i, __last, __first, __pred); }
[解决办法]
这个....
你下一个sgi的stl实现就行了
http://www.sgi.com/tech/stl/stl.tar