C++ 向量迭代器重写运算符->;
我必须做家庭作业来制作我自己的抽象类向量。这个向量应该有迭代器。我将迭代器作为向量的公共部分。这是我的迭代器代码:C++ 向量迭代器重写运算符->;,c++,C++,我必须做家庭作业来制作我自己的抽象类向量。这个向量应该有迭代器。我将迭代器作为向量的公共部分。这是我的迭代器代码: class iterator { friend class Vector; Vector* v_; int position_; iterator(Vector* v,int position) : v_(v), position_(position) {} public: iterator() :
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);
}
};
我的问题是操作符->的定义是否正确
谢谢我相信您确实需要一个稍加修改的定义,以获取向量当前位置的值,即,
返回(*v_)[position_])
如果您重载了向量类的操作符[]
。否则,为了访问向量的缓冲区
,必须先解除对向量的引用,才能访问缓冲区,即返回&(v_uu->buffer[position_u])代码>如果它不能按编写的方式编译,那么它显然是不正确的(当您在操作符->
的定义中使用它时,范围中没有缓冲区->
;也许您的意思是v_>>缓冲区-
?)想知道您的代码是正确的吗?试试看!制作一个使用它的小测试程序,看看它是否能给你预期的结果。这只是代码的一部分:)如果你能在一个失败的小测试中向我们展示你的代码,通常比给我们一个类并告诉我们玩“发现错误”更有用。我想主要的一点是你必须编写&(缓冲区)_[位置])或者简单地说(缓冲区+位置),我的意思是如果一开始有任何问题