2013-03-16 63 views
0

我寫一組類,以獲得他們到底是如何工作的手柄,以及嘗試寫我自己的一個迭代器引用操作。據我所知,Iterator只是一個高層次的指針,它可以抽象出結構的迭代。寫作迭代

這就是說我知道迭代器的重要部分是++和*操作。我已經成功地創建並通過/遞減運算測試,但我有一個時間概念化什麼我需要的時候我尊重迭代器返回地獄。

是否返回它指向的對象?

這裏是我的set.h文件中的相關代碼:

class Set{ 
private: 
    struct Elem { 
     ELEMENT_TYPE info; 
     Elem *prev, *next; 
    }; 
    Elem *_head, *_tail; 
    int _size; 

public: 
    //... 

    class Iterator{ 
     private: 
      Elem * _cur; 

    public: 
     Iterator(){} 
     Iterator(Elem*); 

     Iterator operator++(int); 
     Iterator operator++(); 
     Iterator operator--(int); 
     Iterator operator--(); 

     bool operator==(const Iterator& rhs); 
     bool operator!=(const Iterator& rhs); 

     Elem operator*(); 

    }; 

    //... 
}; 

就像我說的,我返回「ELEM」迭代器指向的,是正確的?

Set::Elem* Set::Iterator::operator*(){ 

return _cur; 
} 
+0

請閱讀[操作符重載FAQ](HTTP: //stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719)。 – 2013-03-16 20:29:07

+0

我看過這個了! – Joshua 2013-03-16 20:41:36

+0

你錯過了顯示'value_type&operator *()的部分嗎? '通過參考返回,這與答案相同? – 2013-03-16 20:44:06

回答

3

通常你返回指向的元素,通過引用。

Elem&  operator*()  { return *_cur; } 

它不依賴於迭代器類型有點,雖然。某些迭代器(例如輸入迭代器)不一定會返回引用。

+0

感謝您的回答! – Joshua 2013-03-18 02:19:49

+0

@Joshua:由於'elem'是一個內部節點類型,更像迭代應返回參照'ELEMENT_TYPE' – 2013-03-19 00:59:47

0

*操作返回值應該是值還是引用

Set::Elem &Set::Iterator::operator*() { 
    return *_cur; 
} 

const Set::Elem &Set::Iterator::operator*() const { 
    return *_cur; 
} 
+0

通常,'const'迭代器返回到可變數據的引用,一個'const_iterator'返回一個參考到不可變的數據。迭代器(包括指針)很奇怪。 'const char *'vs'char * const'。 – 2013-03-19 01:00:39

1

你通常返回一個參考,是這樣的:

ELEMENT_TYPE & operator*() { return _cur->info;}