функтор, возвращающий 0 - PullRequest
       14

функтор, возвращающий 0

7 голосов
/ 19 марта 2010

Я недавно начал учить себя стандартной библиотеке шаблонов. Мне было любопытно, почему метод GetTotal () в этом классе возвращает 0?

...

class Count
{
public:
    Count() : total(0){}
    void operator() (int val){ total += val;}
    int GetTotal() { return total;}
private:
    int total;
};

void main()
{
    set<int> s;
    Count c;
    for(int i = 0; i < 10; i++) s.insert(i);
    for_each(s.begin(), s.end(), c);
    cout << c.GetTotal() << endl;
}

1 Ответ

13 голосов
/ 19 марта 2010

for_each принимает функцию по значению. То есть он использует копию функтора, а не сам функтор. Ваш местный c остался без изменений.

for_each возвращает используемый функтор, поэтому вы можете сделать:

Count c;
c = for_each(s.begin(), s.end(), c);

Или более идиоматически:

Count c = for_each(s.begin(), s.end(), Count());

Однако такая функциональность уже существует (вам не нужен ваш функтор):

int total = std::accumulate(s.begin(), s.end(), 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...