Por que executar a soma para a frente quando você pode fazer isso para trás ? Dado:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
Podemos usar a assinatura, contando ao contrário:
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Podemos usar a "assinatura" com intervalo verificado, contando para trás (apenas no caso):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
Podemos usar iteradores reversos em um loop for:
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
Podemos usar iteradores para frente, iterando para trás, em um loop for (oooh, complicado!):
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
Podemos usar accumulate
com iteradores reversos:
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
Podemos usar for_each
com uma expressão lambda usando iteradores reversos:
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Portanto, como você pode ver, existem tantas maneiras de somar o vetor para trás quanto de somar o vetor para frente, e algumas delas são muito mais empolgantes e oferecem uma oportunidade muito maior para erros isolados.