参数化构造函数和函数对象调用如何协同工作
How does parameterized constructor and functional object invocation work together?
在下面的代码中,考虑转换函数。传递给它的函数对象是 Add(10(。这意味着添加 a = Add(10( 或添加 a = 10 是有效的。 根据我的理解, Add(10( 用一个参数调用构造函数,_v将被初始化为向量的值。因此,最初在执行 + _v之前,_v 的值是向量的内容。相加后,向量的值将增加 10。
任何人都可以澄清如何调用构造函数以及如何调用函数运算符(((int a(吗?
法典:
struct Add
{
int _v;
Add(int v) : _v(v) {}
int operator()(int a)
{
cout<<a;
return a + _v;
}
};
int main()
{
int t[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
vector<int> v1(t, t + 10);
list<int> l1(v1.size());
//Add a = Add(10);
cout << "Source collection:n";
cout << "v1: "; for_each(v1.begin(), v1.end(), print<int>); cout << endl << endl;
cout << "Adding value - 10 to all the elements of the collection:n";
transform(v1.begin(), v1.end(), l1.begin(), Add(10));
cout << "l1: "; for_each(l1.begin(), l1.end(), print<int>); cout << endl << endl;
return 0;
}
输出:源集合:v1: 1 2 3 4 5 6 7 8 9 10
为集合的所有元素添加值 - 10:
12345678910 l1: 11 12 13 14 15 16 17 18 19 20
[...]Add(10( 用一个参数调用构造函数,_v将被初始化为向量的值。[...]
不! _v
将初始化为在构造函数中作为参数传递的值。在您的情况下10
.
所以你将构造一个对象(结构体Add
的实例(,它的变量成员(_v
(被初始化为10
。
当调用函数对象时(请参阅运算符重载(,然后它获取并int
并返回该int
加上存储在 _v
中的值(在本例中为 10(。
标准函数转换的工作方式如下:
transform(v1.begin(), v1.end(), l1.begin(), Add(10));
接受一些输入,应用它们一个函数(转换(,并将转换后的对象存储在某个输出中。
在您的情况下:
- 取一个输入范围,在本例中,所有向量
v1
(// from v1.begin to v2.end
(。 - 采用输出迭代器(将放置转换后的元素(,在您的情况下,您只需将向量的转换元素存储到列表
l1
中。 - 采用执行转换的函数。在您的情况下,该函数是对象函数,是
Add(10)
的实例。因此,operator()
是调用向量的每个元素(这就是为什么Add
operator()
将整数作为输入参数(并返回一个新的整数x + 10
。
简而言之,向量的每个整数都由Add
对象的operator()
转换,该对象给予并求和 10。
相关文章:
- QLibrary 函数在第一次调用时工作缓慢
- 我不明白参数和参数如何协同工作
- Qt C++括号匹配和突出显示当前线路功能无法协同工作
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- Emrun 和无头铬 - 如何让这两者协同工作?
- 如何编译Freetype(2)和Harfbuzz(带有Visual studio)使它们协同工作?
- 模板类实例化如何与类继承协同工作
- 如何将RegisterDragDrop,RoInitialize组合在一个线程中协同工作
- 如何让助推upgrade_to_unique_lock+condition_variable协同工作
- Fruchterman-Reingold的吸引力是如何与Boost图库协同工作的
- 如何使Ws2_32.lib与针对Windows 8.1的VS 2013项目协同工作
- 如何在C++中使一个void函数与另一个void功能协同工作
- std::transform 和 std::p lus 如何协同工作
- 无法让 cgal 和 hdf5 协同工作
- std::ref 和交换功能似乎不能很好地协同工作
- 如何使堆栈在函数调用中工作
- 类的详细信息:设计一组协同工作的类时出错
- 如何使这两个模板类协同工作?(C++中的属性)
- 有什么方法可以让谷歌测试框架与Visual Studio 6协同工作吗
- 参数化构造函数和函数对象调用如何协同工作