c++ - 帮助理解 C++、模板、operator() 的类示例代码

标签 c++ templates operator-overloading

我不确定下面的类究竟做了什么,我们有一个类示例。在下面的代码中,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/

相关文章:

c++ - Microsoft NTLM (v2) 中的时间戳使用

c++ - 当系统时间更改时,QThread::sleep 无法正常工作

c++ - 不同容器的包装器 contains() 函数

python - 是否可以在 Python 中重载++ 运算符?

c++ - operator= 重载返回参数而不是 *this

c++ - 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备

c++ - 维护一个与 std::map 平行的 std::vector

JQuery:如何将事件附加到模板对象?

c++ - 指针作为函数返回类型的部分特化

C++ 重载运算符,解引用引用