我没有使用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
,但这段代码究竟出了什么问题呢?
答案 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);
不需要仿函数!