странный вывод при использовании с вектором итерато

Я получаю странный вывод при запуске следующего кода.
В приведенной ниже функции 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

Могу ли я узнать причину вышеуказанного вывода ??

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));
}
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector