相关疑难解决方法(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
查看次数

我应该使用函数还是无状态函子?

这两段代码做同样的事情.如您所见,它将用于排序功能.哪个更好?我通常写后一个.但是我看到有些编码员会像前者那样做.

struct val_lessthan : binary_function<pair<string,int>, pair<string, int>, bool>
{
    bool operator() (const pair<string,int>& x, const pair<string,int>& y) const
    {
        return x.second < y.second;
    }
} val_lt;
Run Code Online (Sandbox Code Playgroud)

bool val_lt(const pair<string,int>& x, const pair<string,int>& y) 
{
    return x.second < y.second;
}
Run Code Online (Sandbox Code Playgroud)

将使用它像:

std::sort(wordvector.begin(), wordvector.end(), val_lt);
Run Code Online (Sandbox Code Playgroud)

c++ stl function functor

8
推荐指数
2
解决办法
1094
查看次数

什么时候应该在C++中使用函数而不是函子?

由于编译器更容易内联函数,因此函数显然更有效,并且它们在参数化方面的工作效果更好.什么时候应该使用普通的旧函数而不是函子?

c++ c++11

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

将内联函数作为参数传递

我想知道inline当一个函数作为一个函数传递时,C++是否仍然会遵守该关键字.在下面的示例中,是否会在循环中调用onFrame每次推送到堆栈的新帧?frame()while

bool interrupt = false;

void run(std::function<void()> frame) {
    while(!interrupt) frame();
}

inline void onFrame() {
    // do something each frame
}

int main() {
    run(onFrame);
}
Run Code Online (Sandbox Code Playgroud)

或者改变这个有什么影响?

void run(std::function<inline void()> frame) {
    while(!interrupt) frame();
}
Run Code Online (Sandbox Code Playgroud)

如果你没有明确的答案,你能帮我找到一种测试方法吗?可能使用内存地址或某种调试器?

c++ c++11

5
推荐指数
2
解决办法
1560
查看次数

c ++ for_each()和对象函数

我的作业如下:

对于给定的整数数组,找到其元素的总和并打印出最终结果,但是为了获得总和,您需要在STL中仅执行一次函数for_each()(没有循环).

截至目前这是我的代码:

void myFunction (int i) {
cout << " " << i << " " <<  endl;
} 


int main() {

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

vector<int> v(array[0], array[10]);

for_each( v.begin(), v.end(), myFunction);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,输出显示为4198853,起初我认为它是一个内存地址,但我发现这是错误的.有什么想法,我可能做错了什么?

c++

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

为什么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++ ×6

c++11 ×2

functor ×2

function ×1

function-pointers ×1

stl ×1

templates ×1