C++ 封装迭代器:运算符++;超载

C++ 封装迭代器:运算符++;超载,c++,vector,iterator,operator-overloading,C++,Vector,Iterator,Operator Overloading,对于一个任务,我必须实现一个迭代器,它封装了另一个迭代器并执行范围检查。 我的函数prev()、next()、begin()和end()工作得很好,但是我无法让操作符重载工作(在这方面我没有太多经验)。 有趣的是,它没有显示任何错误,但当我运行它时,程序崩溃了。 如果有人能找出原因,那就太好了,非常感谢 以下是我代码的一部分: class MyIterator{ private: vector<int>::const_iterator myBegin; vector&

对于一个任务,我必须实现一个迭代器,它封装了另一个迭代器并执行范围检查。 我的函数prev()、next()、begin()和end()工作得很好,但是我无法让操作符重载工作(在这方面我没有太多经验)。 有趣的是,它没有显示任何错误,但当我运行它时,程序崩溃了。 如果有人能找出原因,那就太好了,非常感谢

以下是我代码的一部分:

class MyIterator{
private:
    vector<int>::const_iterator myBegin;
    vector<int>::const_iterator myEnd;
    vector<int>::const_iterator currentElement;

public:
    MyIterator(vector<int>::const_iterator begin, vector<int>::const_iterator end){

        myBegin = begin;
        myEnd = --end;      //why do I get the address of the element after the last one (just some random address) without decreasing it like that??
        currentElement = begin;
    }


    bool hasNext(){
        if(currentElement == myEnd){
            return false;
        }
        else{
            return true;
        }
    }


    MyIterator& operator++(){
        if(hasNext()){
            currentElement++;
        }
            return *this;
    }

    MyIterator operator++(int)
    {
        MyIterator tmp(*this);
        ++(*this);
        return tmp;
    }

    vector<int>::const_iterator getElement(){
        return currentElement;
    }

};




int main() {

    vector<int> testVector;
    testVector.push_back(8); testVector.push_back(1); testVector.push_back(6); testVector.push_back(5);


    MyIterator * testIterator = new MyIterator(testVector.begin(), testVector.end());

    ++testIterator;
    test = *testIterator->getElement(); cout<<"++: "<<test<<endl;

    return 0;
}
类MyIterator{
私人:
向量::常量迭代器myBegin;
向量::常量迭代器myEnd;
向量::常量迭代器currentElement;
公众:
MyIterator(向量::常量迭代器开始,向量::常量迭代器结束){
myBegin=begin;
myEnd=--end;//为什么我要在最后一个元素之后获取元素的地址(只是一些随机地址),而不这样减少它??
currentElement=开始;
}
布尔·哈斯奈特(){
如果(currentElement==myEnd){
返回false;
}
否则{
返回true;
}
}
MyIterator&运算符++(){
if(hasNext()){
currentElement++;
}
归还*这个;
}
MyIterator运算符++(int)
{
MyIterator tmp(*this);
++(*本条);
返回tmp;
}
vector::const_迭代器getElement(){
返回电流元件;
}
};
int main(){
向量测试向量;
testVector.push_back(8);testVector.push_back(1);testVector.push_back(6);testVector.push_back(5);
my迭代器*testIterator=newmyiterator(testVector.begin(),testVector.end());
++睾丸验证器;

test=*testIterator->getElement();cout我认为问题在于您正在递增
testIterator
,而不是
testIterator
所指向的
MyIterator

++验证器;
您可能打算这样做:

++(*testIterator);
如果您根本不使用指针,这个错误本可以很容易地避免

MyIterator testIterator = MyIterator(testVector.begin(), testVector.end());

++testIterator;
int test = *testIterator.getElement(); 

cout<<"++: "<<test<<endl; // 1
MyIterator testIterator=MyIterator(testVector.begin(),testVector.end());
++睾丸验证器;
int test=*testIterator.getElement();

谢谢你,这是个错误。我在C++方面没有太多的经验,所以我仍然在努力处理整个指针。再次感谢。