用两种不同的方法遍历向量迭代结果不一致

时间:2019-02-09 14:28:05

标签: c++

我使用两种不同的方法遍历同一向量获得了不同的结果。为什么?

当我使用我认为是首选的方法遍历向量时,我又回到了垃圾状态。如果使用其他方法,则效果很好。为什么我选择的方法会导致结果不一致?

for(vector <NgramOutput*>::iterator sausage = (*sausageCarton)->getSausageBox().begin(); sausage != (*sausageCarton)->getSausageBox().end(); ++sausage){
  dosomething(*sausage);
}

for (int i=0; i < sausage.size(); i++) {
  dosomething(sausage[i]);
}

据我所知,两者都应该做基本相同的事情(尽管速度可能会有所不同?),但对我来说,第一个会产生垃圾,例如散落在各处的无效或空指针。第二种方法给出了预期的结果。

1 个答案:

答案 0 :(得分:0)

在您的情况下,*运算符会向您返回迭代器引用的项目,该项目是指针NgramOutput*(来自您的声明)。

要使用该对象,您需要取消引用该指针(**sausage