C++ 使用bind1st还是bind2nd? vectorvwints; 矢量vwIntsB; 对于(int i=0;i
C++ 使用bind1st还是bind2nd? vectorvwints; 矢量vwIntsB; 对于(int i=0;i,c++,stl,C++,Stl,bind1st绑定函数的第一个参数,而bind2nd绑定第二个参数。因为这两个参数类型在本例中是相同的,操作符+是对称的,所以没有区别。在本例中,它们将分别转换为5+a和a+5,并编译为exac同样。bind1st绑定plus()函子的第一个参数,bind2nd绑定第二个参数。在plus的情况下,没有任何区别,因为10+20和20+10是相同的 但是如果你用减去,那会有不同,因为10-20和20-10是不一样的。试试看 说明: vector<int> vwInts; vector&l
bind1st
绑定函数的第一个参数,而bind2nd
绑定第二个参数。因为这两个参数类型在本例中是相同的,操作符+
是对称的,所以没有区别。在本例中,它们将分别转换为5+a和a+5,并编译为exac同样。bind1st
绑定plus()
函子的第一个参数,bind2nd
绑定第二个参数。在plus
的情况下,没有任何区别,因为10+20
和20+10
是相同的
但是如果你用减去,那会有不同,因为10-20
和20-10
是不一样的。试试看
说明:
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
演示:针对您的特定案例
30
30
-10
10
及
都是相同的
这是因为,plus()
二进制函数运算符如下所示
bind2nd()
因此,当您使用bind1st(plus(),5)
时,对plus的调用如下所示
plus(arg1, arg2)
plus(5, vwInts)
因此,上面将使用值5
当您使用bind2nd(plus(),5)
时,对plus的调用如下所示
plus(arg1, arg2)
plus(5, vwInts)
因此,上面将使用值5
添加向量的每个元素
因此,在您的情况下,两者都是相同的如果没有,我建议您研究boost::bind。它比bind1st和bind2nd更灵活、更强大。
plus(vwInts, 5)