Tại sao thực hiện tổng kết về phía trước khi bạn có thể làm điều đó ngược lại ? Được:
std::vector<int> v; // vector to be summed
int sum_of_elements(0); // result of the summation
Chúng ta có thể sử dụng đăng ký, đếm ngược:
for (int i(v.size()); i > 0; --i)
sum_of_elements += v[i-1];
Chúng tôi có thể sử dụng "đăng ký" được kiểm tra phạm vi, đếm ngược (chỉ trong trường hợp):
for (int i(v.size()); i > 0; --i)
sum_of_elements += v.at(i-1);
Chúng ta có thể sử dụng các trình vòng lặp ngược trong một vòng lặp for:
for(std::vector<int>::const_reverse_iterator i(v.rbegin()); i != v.rend(); ++i)
sum_of_elements += *i;
Chúng ta có thể sử dụng các trình vòng lặp tiến, lặp lại ngược, trong một vòng lặp for (oooh, tricky!):
for(std::vector<int>::const_iterator i(v.end()); i != v.begin(); --i)
sum_of_elements += *(i - 1);
Chúng ta có thể sử dụng accumulate
với các trình vòng lặp ngược:
sum_of_elems = std::accumulate(v.rbegin(), v.rend(), 0);
Chúng ta có thể sử dụng for_each
với biểu thức lambda bằng cách sử dụng các trình vòng lặp ngược:
std::for_each(v.rbegin(), v.rend(), [&](int n) { sum_of_elements += n; });
Vì vậy, như bạn có thể thấy, có rất nhiều cách để tổng hợp vectơ ngược lại cũng như tính tổng vectơ về phía trước, và một số trong số này thú vị hơn nhiều và cung cấp cơ hội lớn hơn nhiều cho các lỗi ngoài luồng.