可以从一个集合中移除另一个集合的 remove 函数

// 标准库没有 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 ) ) );
}

稍度了一下,搜到的结果要看不下去了。照抄这个吧,好歹看起来更有追求些。追求效率的别抄。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值