[英]Why does 'for_each' not reading function object
#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
應該調用s
的operator()
,所以結果應該是30,但它顯示為0。
我認為在向量中增加值沒有問題。 為什么s.operator()
不起作用?
for_each
按值獲取其第三個參數,這意味着每次調用operator()
影響s
的完全獨立的副本。 有一個算法正是你正在做什么叫做std::accumulate
,但如果你想讓它與for_each
一起工作,你需要通過使用std::ref
從<functional>
傳遞s
“by reference”。
for_each(vec.begin(), vec.end(), ref(s));
for_each
返回傳入的仿函數的副本,該仿函數提供迭代的“結果”(無論結果如何)。 將您的電話改為:
auto s = for_each(vec.begin(), vec.end(), Sum<int>());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.