Encapsulated Iterator:operator ++重载

时间:2013-12-04 03:03:48

标签: c++ vector iterator operator-overloading

对于一个任务,我必须实现一个迭代器,它封装另一个迭代器并执行范围检查。 我的函数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;
}

1 个答案:

答案 0 :(得分:2)

我认为问题是你正在递增testIterator,而不是MyIterator所指向的testIterator

++testIterator;

您可能打算这样做:

++(*testIterator);

如果你根本不使用指针,那么很容易避免这个错误。

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

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

cout<<"++: "<<test<<endl; // 1