簡體   English   中英

為什么'for_each'沒有讀取函數對象

[英]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應該調用soperator() ,所以結果應該是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM