C ++ stl for_each()和functor,它在哪里创建新对象

时间:2015-07-11 23:26:00

标签: c++ stl functor

我是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));
}

2 个答案:

答案 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()
}