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

标签 c++

这是实际代码。这里我调用 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/

相关文章:

c++ - 用 opencv 打开我的笔记本电脑摄像头

c++ - 编译器忽略显式定义的 move 构造函数?

c++ - OSX Catalina 上的 C++ 和 gem 问题

c++ - proxygen 中的 http 客户端?

c++ - STL:使用 ptr_fun 为 "const T &"类型调用 bind2nd

c++ - 对象指针的指针取消引用?

c++ - Visual Studio C++ 中的静态和动态库链接

c++ - 将超出范围的整数分配给带符号的 char 类型

c++ - 如何在 C++ 中测试条件变量?

c++ - 无法在 std::set 上使用 set_intersection