我是函子的新手。谁能在以下代码中向我解释,该程序何时为矢量的每个元素创建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/

10-12 01:03