// 标准库没有 add_const_reference
template< typename _Ty >
struct add_const_reference
: public add_reference < typename add_const< _Ty >::type >
{
};
template< typename _FwdIt1, typename _FwdIt2 >
FORCEINLINE _FwdIt1 remove( _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2 )
{ // 似乎没人认为标准库中缺少一个可以从一个集合中移除另一个集合的 remove 函数。
// 这个看起来不太容易明白的 bind 式的原语其实是:
// not_equal_to<_FwdIt2 >()( find( _First2, _Last2, _1 ), _Last2 )
// 注:
// 复杂度是 O(n^2),仅适合少量运算。也不要移到其它名字空间下,因为和 std::remove 同名。
return remove_if( _First1, _Last1, bind(
bind( not_equal_to< _FwdIt2 >(), _Last2, _1 ),
bind( find< _FwdIt2, typename add_const_reference<decltype(*_First2)>::type >, _First2, _Last2, _1 ) ) );
}
稍度了一下,搜到的结果要看不下去了。照抄这个吧,好歹看起来更有追求些。追求效率的别抄。