функтор возвращаясь 0

Я недавно начал преподавать мне стандартную библиотеку шаблонов. Мне было любопытно относительно того, почему 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;
}
7
задан Potatoswatter 19 March 2010 в 04:01
поделиться

1 ответ

for_each берет функцию by-value. То есть, используется копия функтора, а не сам функтор. Ваш локальный 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);
13
ответ дан 6 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: