c++ - 如何测试我的迭代器是否等于一个位置

标签 c++ vector iterator

下面的代码可以编译,但是当我运行 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/

相关文章:

c++ - Boost::Thread - 线程创建问题

c++ - 使用稳定 vector 中项目的地址

C++ 标准库方法删除列表中满足条件的一对项目中的一个

C++ 使用结构图

java - 从集合的迭代器中获取第一项会返回一个随机值吗?

c++ - 为什么我的变量超出了它的范围

c++ - C++ 程序上的 iostream.h 问题

c++ - 网格中的最佳路径

c++ - 如何使用具有用户定义结构的 C++ vector ?

c++ - 写一个像 Vector.at() 这样的方法