相关疑难解决方法(0)

C++中的函数指针vs仿函数

使用函子和函数指针有什么区别.例如

  //Functor
  struct add_x
  {
    int x;
    add_x(int y):x(y){}
    int operator()(int y)
    {
       return x+y;
    }
  };
  //Function
  int (func)(int x)
  {
     return ++x;
  }
  std::vector<int> vec();
  //fill vec with 1 2 3 4 5
  int (*f)(int) = func;//Function pointer
  std::transform(vec.begin(),vec.end(),f); //approach 1
  std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2
Run Code Online (Sandbox Code Playgroud)

这两种方法都有效,但我确信会有一种方法比其他方法更受欢迎(或可能).

c++ function-pointers functor

15
推荐指数
1
解决办法
7489
查看次数

为什么std :: less不是一个算符?

为什么不是一个仿函数而不是像下面的myless这样的模板化函数?为什么委员会决定这一点以及我可以在哪里进一步阅读?C++ 11标准也解释了为什么委员会做出了某些决定?

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

using namespace std;

#if 1

template <class T> struct stdless {
  bool operator() (const T& x, const T& y) const {return x<y;}
  typedef T first_argument_type;
  typedef T second_argument_type;
  typedef bool result_type;
};

#else
    #define stdless std::less
#endif

//bool myless(int a, int b) { return a<b; }
template<class T>
bool myless(T a, T b) { return a<b; }

int main()
{
    vector<int> a{5, 3, 1,6};

    myless(5, 6);
    stdless<int>()(5, 6);

    auto fn1=stdless<int>();
    fn1(5,9);
    auto …
Run Code Online (Sandbox Code Playgroud)

c++ templates

1
推荐指数
1
解决办法
614
查看次数

标签 统计

c++ ×2

function-pointers ×1

functor ×1

templates ×1