2010-07-20 62 views
2

我不確定下面的類到底是什麼,我們有一個類示例。在下面的代碼中,operator()在這種情況下做了什麼?我並不完全明白*(開始+第一)和幾乎整個返回表達式作爲正在評估的內容。任何幫助都會很棒。謝謝!幫助理解C++,模板,運算符的類示例代碼()

// 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 

回答

2

如果你問operator()做,它可以讓你調用像函數的對象。示例見this article

如果你問你的例子中的函數在做什麼,它比較傳遞給函數的索引指定的兩個元素的值。 begin + first是指從迭代器begin開始的索引first處的元素,類似地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]值。

0

begin是一個迭代(認爲指針),所以begin + first前進到第一位置。 或在第二種情況下,第二個位置。但是,它並不修改begin本身。

*是引用操作,基本上得到的值被指向到

0

operator()基本上定義了關於你的類的'()'的功能。所以在這種情況下,如果我們有和名爲'ic'的IndexCompare實例,我們可以編寫'ic()'並且定義的功能將運行,類似於函數調用和定義。

我希望這有助於理解運營商擴展。