gpt4 book ai didi

C++ operator() 行为

转载 作者:太空狗 更新时间:2023-10-29 23:46:20 24 4
gpt4 key购买 nike

考虑一下,我使用 std::for_each 和带有重载 operator() 的对象来积累一些关于 vector 内容的数据:

#include <iostream>
#include <vector>
#include <algorithm>

struct A{
int a;
A(): a(0){}

void operator()(int i) {
if(i) a++;
std::cout << "a:" << a << std::endl;
}
};

int main(int argc, char *argv[]) {
//test data
std::vector<int> vec;
vec.push_back(1);
vec.push_back(1);
vec.push_back(0);

//accumulator
A accum;

std::for_each(vec.begin(), vec.end(), accum);
std::cout << "non-zero elements:" << accum.a << std::endl;

return 0;
}

outputs :

a:1
a:2
a:2
non-zero elements:0

为什么非零元素是0?

最佳答案

std::for_each()不通过引用获取其第三个参数,因此生成了 accum拷贝

如果您将 std::cout 语句添加到 A::A() 中,您可以看到这种行为。

请注意,您可以使用 std::count_if() 解决此特定问题:

std::cout << "non-zero elements: "
<< std::count_if(vec.begin(),
vec.end(),
[](const int i) { return i != 0; })
<< std::endl;

关于C++ operator() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017796/

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