C++ concepts: ReversibleContainer
From cppreference.com
                    
                                        
                    
                    
                                                            
                    A ReversibleContainer is a Container that has iterators that meet the requirements of either BidirectionalIterator or RandomAccessIterator.  Such iterators allow a ReversibleContainer to be iterated over in reverse.
| Contents | 
[edit] Requirements
| X | Container type | 
| T | Element type | 
| a,b | Objects of type X | 
[edit] Types
| expression | return type | conditions | complexity | 
|---|---|---|---|
| X::reverse_iterator | iterator type whose value type is T | reverse_iterator<iterator> | compile time | 
| X::const_reverse_iterator | constant iterator type whose value type is T | reverse_iterator<const_iterator> | compile time | 
[edit] Methods
| expression | return type | conditions | complexity | 
|---|---|---|---|
| a.rbegin() | reverse_iterator; const_reverse_iterator for constant a | reverse_iterator(end()) | constant | 
| a.rend() | reverse_iterator; const_reverse_iterator for constant a | reverse_iterator(begin()) | constant | 
| a.crbegin() | const_reverse_iterator | const_cast<X const&>(a).rbegin(); | constant | 
| a.crend() | const_reverse_iterator | const_cast<X const&>(a).rend(); | constant | 
[edit] Example
The following example iterates over a vector (which has random-access iterators) in reverse.
Run this code
#include <vector> #include <iostream> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for(std::vector<int>::reverse_iterator i = v.rbegin(); i != v.rend(); ++i) { std::cout << *i << '\n'; } }
Output:
9 5 1 4 1 3