逆算できるのに、なぜ総和を順方向に実行するのですか?与えられた:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
逆にカウントして、添え字を使用できます。
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
範囲チェックされた「添え字」を使用して、逆にカウントすることができます(念のため):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
forループで逆反復子を使用できます。
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
forループで前方反復子、後方反復子を使用できます(ああ、トリッキーです!):
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
accumulate
リバースイテレータで使用できます。
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
for_each
逆反復子を使用してラムダ式で使用できます。
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
ご覧のとおり、ベクトルを逆方向に合計する方法は、ベクトルを順方向に合計する方法と同じくらい多くあり、これらのいくつかははるかにエキサイティングで、off-by-oneエラーのはるかに大きな機会を提供します。