C++ 函子用于比较的优势

mgu*_*gus 1 c++ function functor stdvector

我在这里看过很多文章,但在比较的情况下,仍然没有弄清楚函子类相对于简单函数的优势。所以我有一个代码摘录,他们想unsigned char *通过简单地遍历每个字符并从左到右比较具有优先级的 ASCII 代码来对向量进行排序。

函子是

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 ); }
};
Run Code Online (Sandbox Code Playgroud)

并且该cmpKey()功能基本上执行我上面描述的操作。对数据进行排序的调用是

sort( localList.begin(), localList.end(), Sorter( 100 ) );
Run Code Online (Sandbox Code Playgroud)

其中 100 是每个字符串的长度。所以,我读过函子的优点是可以存储调用到调用的阶段,并允许将类用作普通函数。我有两个问题:

  1. 在这种情况下,这样做有什么好处?

  2. Sorter将创建多少个类实例?它是只有 1 还是与 的元素一样多locaList

Joh*_*nck 5

  1. 优点是可以存储状态。在您的情况下,状态是length=100.
  2. 调用时会创建一个函子Sorter(100)。它可能会被复制少量(例如调用sort()),但不是针对每个元素。