Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用bind1st还是bind2nd? vectorvwints; 矢量vwIntsB; 对于(int i=0;i_C++_Stl - Fatal编程技术网

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)