为什么可以向后进行求和?鉴于:
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
带有反向迭代器的lambda表达式:
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
因此,正如您所看到的,向后求和向量与向后求和向量的方法之多,其中一些更令人兴奋,并且为一度失误提供了更大的机会。