Geriye doğru yapabildiğinizde toplamı neden ileriye taşıyorsunuz ? Verilen:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
Aboneliği geriye doğru sayarak kullanabiliriz:
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Aralık kontrollü "abonelik" i geriye doğru sayarak kullanabiliriz (her ihtimale karşı):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
For döngüsünde ters yineleyiciler kullanabiliriz:
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
İleri döngüleri geriye doğru yineleyerek bir for döngüsü (oooh, tricky!)
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
accumulate
Ters yineleyicilerle birlikte kullanabiliriz :
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
for_each
Ters yineleyiciler kullanarak bir lambda ifadesi ile kullanabiliriz :
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Gördüğünüz gibi, vektörü ileri doğru toplamak için vektörün geriye doğru toplanmasının birçok yolu vardır ve bunların bazıları çok daha heyecan vericidir ve birebir hatalar için çok daha fazla fırsat sunar.