我是functor的新手。有人可以在下面的代码中向我解释,程序何时为向量的每个元素创建AddValue类的对象?对我来说,for_each()函数应该做的是首先从vec获取一个元素,然后使用这个值(obj.i = value)创建一个新的AddVal obj,然后调用functor AddVal(20)将20添加到i然后打印出来。但我没有看到创建新对象进程发生的位置。感谢你。
#include<iostream>
#include<vector>
#include<algorithm>
class AddVal{
public:
int i;
AddVal(int x) : i(x) {}
void operator () (int val) {std::cout << val+i << std::endl;}
};
int main()
{
std::vector<int> vec = {1,2,3,4,5};
for_each(vec.begin(),vec.end(),AddVal(20));
}
答案 0 :(得分:4)
for_each(vec.begin(),vec.end(),AddVal(20));
// ^
// right here
AddVal(20)
创建一个临时AddVal
对象,调用构造函数AddVal(int x)
,并将20作为参数传递给该构造函数。然后,for_each
算法会在operator()
的每个元素上使用此对象的vec
(或其副本)。
答案 1 :(得分:1)
AddVal(20)
创建一个AddVal
对象作为for_each
的第三个参数传入。然后for_each
在向量的每个元素上计算此对象。代码有点等同于:
std::vector<int> vec = {1,2,3,4,5};
AddVal add_val(20); // create the AddVal object
for (const int& i : vec) {
add_val(i); // calls AddVal::operator()
}