我不确定下面的类究竟做了什么,我们有一个类示例。在下面的代码中,operator() 在这种情况下做了什么?我不太了解 *(begin + first) 和几乎整个返回表达式作为正在评估的内容。任何帮助都会很棒。谢谢!
// IndexCompare.h - interface for IndexCompare class template
#ifndef _INDEXCOMPARE_H_
#define _INDEXCOMPARE_H_
#pragma once
template <class random_iterator>
class IndexCompare {
public:
IndexCompare(random_iterator begin, random_iterator end)
: begin(begin), end(end) {}
~IndexCompare() {}
bool operator() (unsigned int first, unsigned int second) {
return (*(begin + first) < *(begin + second));
}
private:
random_iterator begin;
random_iterator end;
};
#endif
最佳答案
如果您要问 operator ()
的作用,它允许您像调用函数一样调用对象。参见 this article举个例子。
如果您询问示例中的函数在做什么,它会比较传递给函数的索引指定的两个元素的值。 begin + first
指的是从迭代器begin
开始的索引first
处的元素,类似begin + second
。 *(begin + first)
获取该位置的值。
您可以通过传入一对迭代器将此类与任何 STL 容器(支持随机访问)一起使用。例如,您可以将它与这样的 vector 一起使用:
vector<int> vec;
/* add some elements here */
IndexCompare<vector<int>::iterator> compare(vec.begin(), vec.end());
例如,现在调用 compare(2, 5)
将比较 vec[2]
和 vec[5]
的值。
关于c++ - 帮助理解 C++、模板、operator() 的类示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286524/