可能这么解释以后大家还不是很清楚,那么就说点白话吧。我们在做比较
的时候所写的表达式像
x > k
,
x
,这里的
k
是一个参数表示你程序里面的
表达式要和
k
值去比较。
上面这两个表达式对应的应该是
bind2nd
,
简单的理解
就是把
k
作为比较表达式的第二个参数。
如果使用
bind1st
则对应的表达式是
k >
x
,
k
,也就是把
k
作为比较表达式的第一个参数。大家可能会注意到这里面
没有=的比较,
先别着急,
后面将会说道如何实现=的比较。
先举两个例子看看
bind1st
和
bind2nd
的用法。
int a[] = {1, 2, 100, 200};
std::vector arr(a, a + 4);
//
移除所有小于
100
的元素
arr.erase( std::remove_if( arr.begin(),
arr.end(),
std::bind2nd( std::less(), 100)), arr.end());
这里的比较表达式相当于
arr.value
如果用
bind1st
则表达的意思就恰恰相反
//
移除所有大于
100
的元素
arr.erase( std::remove_if( arr.begin(),
arr.end(),
std::bind1st( std::less(), 100)), arr.end());