使用bind1st还是bind2nd?

2024-03-21

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(使用前将#替换为@)

使用bind1st还是bind2nd? 的相关文章

随机推荐