Путаница с индексами циклов - типична для начинающих. Особенно сбивает то, что в стандартной сишной шапке цикла
for (int index = begin; index < end; ++ index)
индекс принимает значение
begin (в первом проходе), но не принимает значение
end.
Советы такие:
1) Очень тщательно, аккуратно и на бумажке, выпишите, что означает индекс цикла, и что означают все остальные величины
при этом значении индекса. (Например, если вы суммируете
а индекс с нуля, то "программистский" индекс будет каждый раз на единичку меньше "математического".)
2) Прогоняйте мысленно циклы при малых числах итераций: 0, 1, 2. Именно это вам и продемонстрировал
Pphantom.
3) Аналогично, мысленно прогоняйте первую, последнюю итерации цикла. Иногда вторую и предпоследнюю.
В принципе, пока индексы числовые, можно использовать другую шапку цикла
for (int index = begin; index <= end; ++ index)
но этого делать не рекомендуется. Это отклонение от сишной традиции. Вы запутаетесь сами, запутаете потенциального читателя вашего кода. И вам труднее будет перейти к более абстрактной идее, реализованной, например, в STL:
for (iterator iter = begin; iter != end; ++ iter)
которая тоже стандарт, на более высоком уровне.
-- 13.10.2016 16:45:22 --См. тж.
Fencepost error.