使用C 函子进行比较的优势
Advantage of C++ functor use for comparison
我在这里看到了许多文章,但在比较的情况下,仍然没有弄清函子类比简单函数的优势。因此,我有一个代码摘录,他们想通过简单地浏览每个字符并将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
的元素?
- 优势是您可以存储状态。在您的情况下,状态为
length=100
。 - 当您调用
Sorter(100)
时,会创建单个函数。它可以复制少量次数(例如,致电sort()
(,但不适合每个元素。
函子的主要用途是在具有某种状态的运行时创建函数。这在您需要功能以拥有一些信息的情况下很重要,但是您不能将此信息作为参数传递到该函数中。一个常见的示例是在诸如std::sort
之类的算法中,其中比较函数必须仅获取两个参数(需要比较的内容(,因此您不能仅将额外的信息作为参数传递。您必须在运行时创建一个函数对象,然后在构造函数中传递该信息。
这本质上是您打电话时要做的
sort( localList.begin(), localList.end(), Sorter( 100 ) );
您正在创建一个混蛋功能,其中您在构造功能时传递了有关100的信息。调用它仍然只需要两个参数,因此这将在std::sort
算法中起作用。除了诸如std::bind
。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 将 std::set 与基于键的比较器一起使用
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- set_intersection使用自定义设置比较器
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 不能将重载比较运算符与 Catch 测试一起使用
- 重构使用动态强制转换的 std::set 的比较运算符
- 视觉C++使用 map 来比较字符串中的每个单词
- C++ <algorithm> 使用对象作为比较定义的 sort()
- C++,如何使用常量对象和非常量对象进行比较?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 使用迭代器的自定义比较器函数
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 如何使用变量模板比较 C++ 17 中的变量类型?
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 比较使用不同分配器的STL字符串
- C++与n-Gram的最快文本行比较?使用字符串、字符*、矢量