我不确定下面的类对于类示例到底做了什么。在下面的代码中,operator()在这种情况下做了什么?我没有得到*(开始+第一)和几乎整个返回表达式作为被评估的东西。任何帮助都会很棒。谢谢!
// 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
答案 0 :(得分:2)
如果您询问operator ()
做了什么,它可以让您像对待函数一样调用对象。有关示例,请参阅this article。
如果你问的是你的例子中的函数是做什么的,那就是比较传递给函数的索引所指定的两个元素的值。 begin + first
从迭代器first
开始引用索引begin
处的元素,类似begin + second
。 *(begin + first)
获取该位置的值。
您可以通过传入一对迭代器将此类用于任何STL容器(支持随机访问)。例如,您可以使用这样的矢量:
vector<int> vec;
/* add some elements here */
IndexCompare<vector<int>::iterator> compare(vec.begin(), vec.end());
现在调用compare(2, 5)
会比较vec[2]
和vec[5]
的值。
答案 1 :(得分:0)
begin
是一个迭代器(思考指针),因此begin + first
前进到第一个位置。
或者在第二种情况下,到第二种情况。但是,它不会修改begin
本身。
*
是一个解除引用运算符,它实际上是指向
答案 2 :(得分:0)
operator()基本上是针对你的类定义'()'的功能。所以在这种情况下,如果我们和IndexCompare实例名为'ic',我们可以编写'ic()'并运行定义的功能,类似于函数调用和定义。
我希望这有助于理解运营商扩展。