gpt4 book ai didi

c++ - 为什么 'for_each' 不读取函数对象

转载 作者:太空狗 更新时间:2023-10-29 20:08:29 26 4
gpt4 key购买 nike

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <class T>
class Sum {
public:
Sum(T i = 0) : res(i) {}
void operator()(T x) { res =res + x; }
T result() const { return res; }
private:
T res;
};

int main() {
Sum<int> s;
vector<int> vec;
vec.insert(vec.begin(), 10);
vec.insert(vec.begin()+1, 10);
vec.insert(vec.begin()+2, 10);

vector<int>::iterator itr = vec.begin();
cout << *itr << endl;
for_each(vec.begin(), vec.end(), s);
cout << "sum is" << s.result() << endl;
return 0;
}

这是我的代码。我想在类 Sum res 中添加 vec 值。 for_each 应该调用 soperator(),所以结果应该是 30,但它显示为 0。

我觉得给vector加值没问题。为什么 s.operator() 不工作?

最佳答案

for_each 按值获取第三个参数,这意味着每次调用 operator()影响一个完全独立的拷贝 s .有一种算法可以准确地计算出您正在做的事情,称为 std::accumulate , 但如果你想让它与 for_each 一起使用你需要通过 s使用 std::ref “通过引用”来自 <functional> .

for_each(vec.begin(), vec.end(), ref(s));

关于c++ - 为什么 'for_each' 不读取函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com