2011-05-09 61 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_]);