template <class T, class A = allocator<T> > class vector { public: // ... // iterators: iterator begin(); // points to first element const_iterator begin() const; iterator end(); // points to one-past-last element const_iterator end() const; reverse_iterator rbegin(); // points to first element of reverse sequence const_reverse_iterator rbegin() const; reverse_iterator rend(); // points to one-past-last element of reverse sequence const_reverse_iterator rend() const; // ... }; /* * Usage of reverse iterator * */ template<class C> typename C::iterator find_last(C& c, typename C::value_type v) { typename C::reverse_iterator ri = find(c.rbegin(),c.rend(),v); if (ri == c.rend()) return c.end(); // use c.end() to indicate "not found" typename C::iterator i = ri.base(); return --i; } template<class C> typename C::iterator find_last(C& c, typename C::value_type v) { typename C::iterator p = c.end(); // search backwards from end while (p!=c.begin()) if (*--p==v) return p; return c.end(); // use c.end() to indicate "not found" } template<class C> typename C::iterator find_last(C& c, typename C::value_type v) { typename C::reverse_iterator p = c.rbegin(); // view sequence in reverse order while (p!=c.rend()) { if (*p==v) { typename C::iterator i = p.base(); return --i; } ++p; // note: increment, not decrement (--) } return c.end(); // use c.end() to indicate "not found" }