【问题标题】:How to use for_each with the function as the overloaded operator()如何将 for_each 与函数一起用作重载的 operator()
【发布时间】:2010-06-21 04:03:48
【问题描述】:

我有一个函数对象的 std::vector。每个对象都可以接受一个 int,所以我可以说 obj(4) 并得到一个 int 结果。如何使用算法 for_each 处理向量的每个元素?

【问题讨论】:

    标签: c++ algorithm stl iterator


    【解决方案1】:

    您必须创建一个“调用”每个对象的函子:

    struct Caller {
      int value;
      void operator()( const YourFunctorHere& f ) const {
        f( value );
      }
    } caller;
    std::for_each( functors.begin(), functors.end(), caller );
    

    【讨论】:

    • 它也必须继承unary_function
    • 你不必编写函子,一个简单的函数也可以。
    • 你也可以使用bind2nd( mem_fun_ref( YourFHere::memberfunction ), 4 )...
    • @John Smith:例如,它是必需的。 transformcopyfor_each 不需要 unary_function 成员。
    【解决方案2】:

    哪个版本的 C++? C++0x Lambda 让这一切变得简短而甜蜜。

    在 C++03 中,for 循环将比 for_each 更简单。

    要在 C++03 中使用 for_each,您需要创建一个函子,将所有输入参数存储在成员变量中并将其传递给 for_each。向量中的每个仿函数都将作为参数传递给这个访问者仿函数,然后您需要使用存储的参数调用它的 operator()。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多