运行以下代码时,我得到奇怪的输出。 在下面给出的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;
//=======================
下面给出的getMeanGap函数
template<typename Type>
float VIDSegment::getMeanGap(const vector<Type> & vec) const
{
if (vec.size() < 2) return 0.0;
cout << "----" <<endl;
float sum = 0.0;
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));
}
return float(sum / (vec.size() - 1));
}
在上面的代码上运行时,我得到了以下结果
>>
26 51
56 19
112 23
175 25
211 26
331 23
379 23
424 23
471 23
----
0 0 // ??
26 51
56 19
112 23
175 25
211 26
331 23
379 23
424 23
471 23
我可以知道上述输出的原因吗?
答案 0 :(得分:1)
该函数具有未定义的行为,因为您正在尝试访问无效的迭代器
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));
}