1

我不怎么使用 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错了,但这段代码到底有什么问题?

4

2 回答 2

4

for_each使用您提供的仿函数的副本,然后在最后返回一个副本。你需要这个:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
于 2011-04-30T18:47:37.810 回答
3

如果你只是想计算总和,那么你也可以使用std::accumulate

#include <numeric>

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

不需要函子!

于 2011-04-30T18:50:30.207 回答