2011-05-09 63 views
0

我已經爲作業做出了自己的抽象類Vector。這個向量應該有迭代器。我在Vector的公共部分製作迭代器。這是我的迭代器代碼:矢量迭代器覆蓋運算符 - >

class iterator { 
    friend class Vector; 
    Vector* v_; 
    int position_; 

    iterator(Vector* v,int position) 
    : v_(v), 
     position_(position) 
    {} 

public: 

    iterator() 
    : v_(0), 
     position_(0) 
    {} 

    iterator& operator++() {// pre 
     position_++; 
     return *this; 
    } 

    iterator operator++(int) {//post 
     iterator res=*this; 
     position_++; 
     return res; 
    } 

    T& operator*() { 
     return v_->buffer_[position_]; 
    } 

    T* operator->() { 
     return &buffer_[position_]; 
    } 

    bool operator==(const iterator& other) const { 
     return position_ == other.position_; 
    } 

    bool operator!=(const iterator& other) const { 
     return !operator==(other); 
    } 
}; 

我的問題是如果運算符 - >是正確定義的。

感謝

+1

鑑於它不會像編寫的那樣編譯,所以顯然是不正確的當你在'operator->'的定義中使用它時,沒有'buffer_';也許你的意思是'v_-> buffer_'?) – 2011-05-09 20:00:44

+2

想知道你的代碼是正確的嗎?嘗試一下!製作一個使用它的小測試程序,看它是否能給你預期的結果。 – hammar 2011-05-09 20:03:35

+0

這只是代碼的一部分:) – 2011-05-09 20:07:15

回答

1

我相信你真的想要一個稍微修改定義,在矢量的當前位置得到值,即return &((*v_)[position_]);如果你超載你的載體類的operator[]。否則,爲了訪問你的矢量的buffer_,你必須首先解引用矢量才能進入緩衝區,即,return &(v_->buffer[position_]);