gpt4 book ai didi

c++ - 是否可以将其重写为一个类轮?

转载 作者:太空狗 更新时间:2023-10-29 23:31:00 25 4
gpt4 key购买 nike

这是实际代码。这里我调用 for_each 来执行 sum 中显示的功能。这是否可以简化为在 for_each 语句本身中编写函数?

int S;
struct sum
{
sum(int& v): value(v){}
void operator()(int data)const {value+=(int)((data+(data%S==0?0:S))/S)+2;}
int& value;
};
int main()
{
int cnt=0;
S=5;
for_each(flights.begin(),flights.end(),sum(cnt));
cout<<cnt-2;
return 0;
}

最佳答案

在 C++11 中,您可以使用带捕获的 lambda:

int main()
{
int cnt = 0;
S = 5;
for_each(
flights.begin(), flights.end(),
[&] (int data) {
cnt += (data + (data % S == 0 ? 0 : S)) / S + 2;
});
cout << cnt - 2;
return 0;
}

它的读法是:你有一个匿名函数接受一个 int 参数,它通过引用捕获 ([&]) 周围的上下文。请注意,这与您的解决方案一样高效,因为编译器有效地为您从 lambda 创建了结构。

– 正如 Navaz 在他的评论中指出的那样,强制转换实际上是不必要的。此外,C 风格的强制转换通常被视为已弃用 – 请改用 C++ 强制转换。

关于c++ - 是否可以将其重写为一个类轮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10979179/

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