对于一个任务,我必须实现一个迭代器,它封装另一个迭代器并执行范围检查。 我的函数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;
}
答案 0 :(得分:2)
我认为问题是你正在递增testIterator
,而不是MyIterator
所指向的testIterator
。
++testIterator;
您可能打算这样做:
++(*testIterator);
如果你根本不使用指针,那么很容易避免这个错误。
MyIterator testIterator = MyIterator(testVector.begin(), testVector.end());
++testIterator;
int test = *testIterator.getElement();
cout<<"++: "<<test<<endl; // 1