vector<int> vwInts;
vector<int> vwIntsB;
for(int i=0; i<10; i++)
vwInts.push_back(i);
transform(vwInts.begin(), vwInts.end(), inserter(vwIntsB, vwIntsB.begin()),
bind1st(plus<int>(), 5)); // method one
transform(vwInts.begin(), vwInts.end(), inserter(vwIntsB, vwIntsB.begin()),
bind2nd(plus<int>(), 5)); // method two
我知道bind1st和bind2nd之间的用法差异,方法一和方法二都为我提供了预期的结果。
在这种情况下(即变换的使用)是否真的没有很大的区别,所以我可以使用bind1st或bind2nd?
因为,到目前为止我看到的所有示例都使用方法二。我想知道上述情况下的bind1st 和bind2nd 是否相同。
bind1st
绑定第一个参数plus<int>()
函子,并且bind2nd
绑定第二个参数。的情况下plus<int>
,这没有任何区别,因为10+20
and 20+10
是一样的。
但如果你这样做minus<int>
,这会有所不同,因为10-20
and 20-10
不一样。尝试这样做。
插图:
int main () {
auto p1 = bind1st(plus<int>(),10);
auto p2 = bind2nd(plus<int>(),10);
cout << p1(20) << endl;
cout << p2(20) << endl;
auto m1 = bind1st(minus<int>(),10);
auto m2 = bind2nd(minus<int>(),10);
cout << m1(20) << endl;
cout << m2(20) << endl;
return 0;
}
Output:
30
30
-10
10
Demo : http://ideone.com/IfSdt http://ideone.com/IfSdt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)