Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果是';它不是函数指针,它是什么?_C++_Function Pointers - Fatal编程技术网

C++ 如果是';它不是函数指针,它是什么?

C++ 如果是';它不是函数指针,它是什么?,c++,function-pointers,C++,Function Pointers,首先,我发现priority\u queue会对较大的整数给予较高的优先级。 而如果我们使用priority\u queue,那么它的作用是相反的。为什么? 此外,我们放在优先级队列中的比较器似乎不是函数指针。相反,它被定义为: struct cmp{ bool operator() (const int& lhs, const int&rhs) const { ... } } 我听说这是一个非常有用的C++语言;谁能给我解释一下这类代码

首先,我发现
priority\u queue
会对较大的整数给予较高的优先级。 而如果我们使用
priority\u queue
,那么它的作用是相反的。为什么?

此外,我们放在优先级队列中的比较器似乎不是函数指针。相反,它被定义为:

struct cmp{
    bool operator() (const int& lhs, const int&rhs) const
    {
        ...
    }
}
我听说这是一个非常有用的C++语言;谁能给我解释一下这类代码吗?

这是一个函子。它基本上是一个类/对象,通过重载
operator()
来充当函数。例如,在代码中,您可以执行以下操作:

cmp func;
func(1, 2);
// ^ calls operator()

您可以阅读更多关于它们的信息。

这种代码的好处是,如果类型是模板化的,您可以放入函数指针或类似于上述的类(函子)。无论哪种情况,它们都可以工作,前者更简单,而后者可以提供数据。c++11中的lambda使它们有点冗余。

函子通常用于在整个算法中维护状态。考虑下面的搜索功能:

struct Foo { int x };
std::vector<Foo> fooList; // Imagine this is populated.

struct FindFunc
{
    FindFunc(int toFind) : val(toFind) {}
    bool operator()(const Foo& el) { return el.x == val; }
    int val;
};

// Seach the list of Foo objects for one where member x is 42
std::find_if(fooList.begin(), fooList.end(), FindFunc(42));
structfoo{intx};
std::向量傻瓜;//想象一下这里有人居住。
结构FindFunc
{
FindFunc(int-toFind):val(toFind){}
bool运算符()(const Foo&el){return el.x==val;}
int-val;
};
//搜索成员x为42的对象的Foo对象列表
std::find_if(foulist.begin(),foulist.end(),FindFunc(42));