我是函子的新手。谁能在以下代码中向我解释,该程序何时为矢量的每个元素创建AddValue类的对象?对我来说,for_each()函数应该首先从vec中获取一个元素,然后使用该值(obj.i = value)创建一个新的AddVal obj,然后调用函子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));
}
最佳答案
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()
}
关于c++ - C++ STL for_each()和仿函数,它在哪里创建新对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31362848/