使用C 函子进行比较的优势

Advantage of C++ functor use for comparison

本文关键字:比较 使用      更新时间:2023-10-16

我在这里看到了许多文章,但在比较的情况下,仍然没有弄清函子类比简单函数的优势。因此,我有一个代码摘录,他们想通过简单地浏览每个字符并将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是每个字符串的长度。因此,我已经读到函子具有将舞台存储从呼叫到呼叫的优势,并允许该类用作普通函数。我有两个问题:

  1. 在这种情况下,这是什么优势?

  2. 将创建多少个Sorter类实例?仅1或只有locaList的元素?

  1. 优势是您可以存储状态。在您的情况下,状态为 length=100
  2. 当您调用Sorter(100)时,会创建单个函数。它可以复制少量次数(例如,致电sort()(,但不适合每个元素。

函子的主要用途是在具有某种状态的运行时创建函数。这在您需要功能以拥有一些信息的情况下很重要,但是您不能将此信息作为参数传递到该函数中。一个常见的示例是在诸如std::sort之类的算法中,其中比较函数必须仅获取两个参数(需要比较的内容(,因此您不能仅将额外的信息作为参数传递。您必须在运行时创建一个函数对象,然后在构造函数中传递该信息。

这本质上是您打电话时要做的

 sort( localList.begin(), localList.end(), Sorter( 100 ) );

您正在创建一个混蛋功能,其中您在构造功能时传递了有关100的信息。调用它仍然只需要两个参数,因此这将在std::sort算法中起作用。除了诸如std::bind

之外