【发布时间】:2017-06-26 06:29:49
【问题描述】:
我在这里看过很多文章,但在比较的情况下,我仍然没有弄清楚仿函数类相对于简单函数的优势。所以我有一个代码摘录,他们想要通过简单地遍历每个字符并从左到右比较优先级的 ASCII 代码来对 unsigned char * 的向量进行排序。
函子是
class Sorter {
private:
unsigned int length;
public:
Sorter( unsigned int _length ): length( _length ) {}
bool operator()( const unsigned char* keyl, const unsigned char* keyr ) { return cmpKey( keyl, keyr, length ); }
};
cmpKey() 函数基本上完成了我上面描述的操作。对数据进行排序的调用是
sort( localList.begin(), localList.end(), Sorter( 100 ) );
其中 100 是每个字符串的长度。所以,我读到仿函数具有存储从调用到调用的阶段的优点,并允许将类用作普通函数。我有两个问题:
在这种情况下这样做有什么好处?
将创建多少个
Sorter类的实例?是只有1个还是和locaList的元素一样多?
【问题讨论】:
-
什么是
cmpKey(),您为什么需要length? -
如果没有函子,您如何将
100作为第三个参数传递给cmpKey?
标签: c++ function stdvector functor