sumowanie wartości wektoru

Odpowiedz Nowy wątek
2011-08-20 21:11
Pawel
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;
}
edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-08-20 21:42
0

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

Pozostało 580 znaków

2011-08-20 22:04
Rev
0

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


Pozostało 580 znaków

2011-08-20 22:13
Pawel
0

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

Pozostało 580 znaków

2011-08-20 22:22
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?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-20 22:22

Pozostało 580 znaków

2011-08-20 22:52
Pawel
0

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

http://www.adgraf.net/skroty.php - szkoda, że mało polskich, może na innej stronie jest więcej polskich skrótowców - Wibowit 2011-08-20 23:23

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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