C++ stl for_each() 和仿函数,它在哪里创建新对象
C++ stl for_each() and functor, where does it create new objects
我是仿函数的新手。谁能在下面的代码中向我解释一下,程序何时为向量的每个元素创建 AddValue class 的对象?对我来说,for_each() 函数应该做的是首先从 vec 中获取一个元素,然后使用这个值 (obj.i=value) 创建一个新的 AddVal 对象,然后调用仿函数 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));
}
for_each(vec.begin(),vec.end(),AddVal(20));
// ^
// right here
AddVal(20)
创建一个临时 AddVal
对象,调用构造函数 AddVal(int x)
,并将 20 作为参数传递给该构造函数。 for_each
算法然后在 vec
.
的每个元素上使用此对象(或其副本)中的 operator()
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()
}
我是仿函数的新手。谁能在下面的代码中向我解释一下,程序何时为向量的每个元素创建 AddValue class 的对象?对我来说,for_each() 函数应该做的是首先从 vec 中获取一个元素,然后使用这个值 (obj.i=value) 创建一个新的 AddVal 对象,然后调用仿函数 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));
}
for_each(vec.begin(),vec.end(),AddVal(20));
// ^
// right here
AddVal(20)
创建一个临时 AddVal
对象,调用构造函数 AddVal(int x)
,并将 20 作为参数传递给该构造函数。 for_each
算法然后在 vec
.
operator()
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()
}