Проблема, с которой вы столкнулись, заключается в том, что end()
не возвращает иттератор, указывающий на последний элемент в вашем списке, а скорее указывает на элемент один после последнего элемента. в вашем списке. Это позволяет следующему коду
for(list<int>::iterator it=numbers.begin(); it != numbers.end(); it++)
запускаться для каждого элемента в вашем списке и завершаться только тогда, когда итератор указывает за на конец вашего списка ... следовательно, печатая каждый элемент. Для броска в обратном порядке
itBack != numbers.begin()
Это станет неверным , когда вы достигнете первого элемента своего списка и не будете его преследовать. Попытка почтить end()
, как упоминалось в комментариях, ведет к неопределенному поведению, поскольку вы эффективно индексируете вне массива.