首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bind1st还是bind2nd?

使用bind1st还是bind2nd?
EN

Stack Overflow用户
提问于 2011-07-29 02:14:33
回答 4查看 3.1K关注 0票数 5
代码语言:javascript
复制
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之间的用法差异,方法一和方法二都为我提供了预期的结果。

在这种情况下(即transform的使用)没有太大的区别,所以我可以使用bind1st或bind2nd,这是真的吗?

因为,到目前为止,我看到的所有示例都使用方法二。我想知道上述情况下的bind1st和bind2nd是否相同。

EN

回答 4

Stack Overflow用户

发布于 2011-07-29 02:20:26

bind1st绑定plus<int>()函数器的第一个参数,bind2nd绑定第二个参数。对于plus<int>,这没有任何区别,因为10+2020+10是一样的。

但是如果你用minus<int>来做这件事,就会有所不同,因为10-2020-10是不同的。试着这样做。

插图:

代码语言:javascript
复制
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;
}

输出:

代码语言:javascript
复制
 30
 30
-10
 10

演示:http://ideone.com/IfSdt

票数 7
EN

Stack Overflow用户

发布于 2011-07-29 02:17:13

bind1st绑定函数的第一个参数,而bind2nd绑定第二个参数。由于两个参数类型在本例中是相同的,并且operator+是对称的,所以没有区别。

票数 4
EN

Stack Overflow用户

发布于 2011-07-29 02:18:18

在本例中,它们将分别转换为5+a和a+ 5,编译后的结果完全相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6863677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档