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));