for_each奇怪的行为

时间:2011-04-30 18:45:52

标签: c++ stl foreach function-object accumulator

我没有使用STL,我想开始学习它,所以我使用STL的for_each函数制作了一个非常简单的程序。这是整个程序(减去头文件):

class Object {
public:
    int s;

    Object() : s(0) { }

    Object(const Object& rhs) : s(rhs.s) { }

    void operator() (int a) {
        s += a;
    }
};

int main () {
    Object sum;
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

    cout << sum.s;

    cin.get();

    return 0;
}

该计划输出0。我肯定错误地使用for_each,但这段代码究竟出了什么问题呢?

2 个答案:

答案 0 :(得分:4)

for_each适用于您提供的仿函数的副本,然后在结尾处返回副本。你需要这个:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

答案 1 :(得分:3)

如果您只想计算总和,那么您也可以使用std::accumulate作为:

#include <numeric>

int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);

不需要仿函数!