I'm wondering what the benefits of using rbegin() rather than end() - 1 are for STL containers. For example, why would you use something like: vector<int> v; v.push_back(999); vector<int>::reverse_iterator r = v.rbegin(); vector<int>::iterator i = r.base(); Rather than: vector<int> v; v.push_back(999); auto r = v.end() - 1; rbegin() return an iterator with a reverse operator++ ; that is, with a reverse_iterator you can iterate through a container going backward. Example: #include <vector> #include <iostream> int main() { std::vector<int> v{0,1,2,3,4}; for( auto i = v.rbegin(); i != v.rend(); +