gpt4 book ai didi

c++ - C++ 中带有 std::for_each 的仿函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:57 25 4
gpt4 key购买 nike

这是我从 http://www.catonmat.net/blog/on-functors/ 复制的仿函数代码.

#include <algorithm>
#include <iostream>
#include <list>

class EvenOddFunctor {
int even_;
int odd_;
public:
EvenOddFunctor() : even_(0), odd_(0) {}
void operator()(int x) {
if (x%2 == 0) even_ += x;
else odd_ += x;
}
int even_sum() const { return even_; }
int odd_sum() const { return odd_; }
};

int main() {
EvenOddFunctor evenodd;

int my_list[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// ??? why assign
evenodd = std::for_each(my_list,
my_list+sizeof(my_list)/sizeof(my_list[0]),
evenodd); // ???

std::cout << "Sum of evens: " << evenodd.even_sum() << "\n";
std::cout << "Sum of odds: " << evenodd.odd_sum() << std::endl;

// output:
// Sum of evens: 30
// Sum of odds: 25
}

为什么我们需要像evenodd = std::for_each(my_list,那样在操作之后将值赋回给evanodd对象?我认为作为evenodd对象从std::for_each更新过来,我不需要赋值操作,但是没有这个赋值,结果显示0。

最佳答案

std::for_each 按值接受仿函数,这意味着它修改本地拷贝。作业会取回该本地拷贝,这样您就可以实际看到修改后的版本。

这很重要,因为您的仿函数具有您感兴趣的可变状态,特别是 evenodd.even_sumevenodd.odd_sum

关于c++ - C++ 中带有 std::for_each 的仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com