sumowanie wartości wektoru

0

Czemu wynikiem jest 0 ? Jak dam cout<<buf w operator() to widzę że sumuje....

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

template<class T>
class Sum
{
    T buf;
    public:
    Sum(): buf(T()) {}
    void operator()(const T val)
    {
        buf += val;
    }

    friend ostream& operator<<(ostream& os, const Sum& s)
    {
        return os << s.buf;
    }
};


int main()
{
    vector<double> v;
    for(int i=0;i<5;++i)
        v.push_back(i);

    Sum<double> s;

    for_each(v.begin(), v.end(), s);

    cout << s << '\n';

    return 0;
}
0

Twój funktor przekazywany jest przez wartość zatem for_each działa na kopii do której ty nie masz dostępu.

0

Dobra wiadomość jest taka, że for_each ją zwraca, więc możesz zrobić s = for_each(v.begin(), v.end(), s);.

0

To jak powinienem przekazać, żeby nie było przez wartość ? : >

0

The behavior of this template function is equivalent to:

template<class InputIterator, class Function>
  Function for_each(InputIterator first, InputIterator last, Function f)
  {
    for ( ; first!=last; ++first ) f(*first);
    return f;
  }

Wniosek: nie da się, trzeba pobrać wynik for_eacha.

ATSD:
Czy aby na pewno zmienna buf zostanie zainicjalizowana?

0

ATSD ?
nie lubię tej głupiej mody na skracanie każdego wyrazu ;|

1 użytkowników online, w tym zalogowanych: 0, gości: 1