下面的代码可以编译,但是当我运行 exe 时,它将通过 vector 的末尾,我得到一个运行错误。这两行是在构造函数中定义的。
vector< myObj > myVect;
vector< myObj >::iterator myVectit = myVect.begin();
调用一个方法来增加迭代器。在 ti 到达其对象的末尾之前,它似乎工作正常。
myVectit++;
if(myVectit == myVect.end()) //<- Vector iterator not dereferenecable
myVectit = myVect.begin();
if 语句给我一个错误“Vector iterator not dereferencable”
我发现这在反复试验后有效。
++myVectit ;
if(this->myVectit == this->myVect.end()){
myVectit = myVect.begin();
}
奇怪的是反向作用
if(this->myVectit != this->myVect.end()){
++myVectit ;
}
else
myVectit = myVect.begin();
所以我留下了两个问题。我所做的第一次尝试与第二次使用“this->”的尝试之间的主要区别是什么。
其次,为什么我的解决方案的逆向不起作用?
最佳答案
myVectit++;
正如您在 initial revision 中所拥有的那样, 是未定义的行为,因为
vector< myObj >::iterator myVectit;
此时未正确初始化。
你的代码应该看起来像
vector< myObj > myVect;
vector< myObj >::iterator myVectit = myVect.begin(); // <<< Initialize your iterator
// properly
if(myVectit != myVect.end()) { // Test for in range
++myVectit; // Safely increment
}
else {
myVectit = myVect.begin(); // Wrap around
}
即使您已在别处正确初始化了 myVectit
,您也应该在 递增之前针对 myVectit != myVect.end()
进行测试。
关于c++ - 如何测试我的迭代器是否等于一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747004/