【发布时间】:2021-02-12 04:53:34
【问题描述】:
我是 C++ 新手,我正在学习 C++20。我正在尝试一个结构函数,它是将一个函数包装在一个结构中,而我们可以在这个结构中声明本地属性。
问题是当我将此结构函数传递给for_each 函数时,它不起作用。
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct accumulateAmount{
int total_amount;
accumulateAmount() { total_amount = 100 ;} //constructor
void operator()(int num){
total_amount += num;
}
};
int main(){
vector<int> nums{1,2,3,4,5};
accumulateAmount acctor;
for_each(nums.begin(), nums.end(), acctor);
cout << acctor.total_amount << endl;
return 0;
}
输出为100。它没有实现累加器功能。
如果我将循环从 for_each 更改为普通 for 循环,如下所示:
for (int i = 0; i < nums.size(); i++){
acctor(nums[i]);
}
有效。
所以我想知道是不是因为 'for_each' 包含并行计算,因此对于向量中的每个 int,我们对它们使用独立的函数?
【问题讨论】:
-
您不会将结果分配给任何东西。无论如何,Homespun 函子不是要走的路,你需要一个 lambda。
标签: c++