C++ 与向量迭代器一起使用时的奇怪输出

C++ 与向量迭代器一起使用时的奇怪输出,c++,vector,stl,C++,Vector,Stl,当运行以下代码时,我得到了奇怪的输出。 在下面给出的getMeanGap函数中,与调用函数中打印的向量元素相比,它会打印不同的向量元素 //===Main Function======== cout << ">>" << endl; for (typename vector<Type>::iterator it = v1.begin(); it != v1.end(); ++it) { cout <<

当运行以下代码时,我得到了奇怪的输出。 在下面给出的getMeanGap函数中,与调用函数中打印的向量元素相比,它会打印不同的向量元素

//===Main Function========

    cout << ">>" << endl;
    for (typename vector<Type>::iterator it = v1.begin(); it != v1.end(); ++it)
    {
      cout << it->x << "\t" << it->y << endl; // "\t" << it->width << "\t" << it->height << endl;
    }

    cout << getMeanGap(v1) << endl;

//=======================

我可以知道上面输出的原因吗???

函数有未定义的行为,因为您试图访问无效的迭代器

vec.begin() - 1
并在声明中使用它

cout << it->x << "\t" << it->y << endl;

cout x在容器开始之前访问一个元素时,您真的感到奇怪吗?
it=vec.begin()-1
——这是未定义的行为。可能您打算在函数中使用
temp
而不是
it
。但是为什么你要用奇怪的方式来初始化它呢?我刚读到C++的引物,在迭代器给出奇怪输出之前访问元素,并且根本没有任何意义。OHI我需要,VEC。Enter():1:现在我得到的Itter应该主要用于算法内部。要打印向量的内容,实际上只需将
begin()
end()
传递给正确的算法(在这种情况下,
std::copy
,并将
std::ostream\u迭代器作为目标)。
vec.begin() - 1
cout << it->x << "\t" << it->y << endl;
  for (typename vector<Type>::const_iterator it = vec.begin() - 1; it != vec.end(); ++it)
  {
    typename vector<Type>::const_iterator temp = it;
    temp++;
    cout << it->x << "\t" << it->y << endl;
    sum += ( (temp->x) - (it->x) - (it->width));
  }