对于每一个奇怪的行为

for_each weird behaviour

本文关键字:每一个      更新时间:2023-10-16

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

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

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

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

#include <numeric>
int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);

不需要函子!