Difference between revisions of "cpp/named req/ReversibleContainer"
From cppreference.com
(not true for std::forward_list) |
(elaborate requirements, clean up example) |
||
Line 2: | Line 2: | ||
{{cpp/concept/navbar}} | {{cpp/concept/navbar}} | ||
− | + | A {{ttb|ReversibleContainer}} is a {{concept|Container}} that has iterators that meet the requirements of either {{concept|BidirectionalIterator}} or {{concept|RandomAccessIterator}}. Such iterators allow a {{ttb|ReversibleContainer}} to be iterated over in reverse. | |
+ | |||
+ | ===Requirements=== | ||
− | |||
− | |||
{{dcl list begin}} | {{dcl list begin}} | ||
− | {{dcl list | + | {{dcl list item|{{ttb|X}}|Container type}} |
− | {{dcl list | + | {{dcl list item|{{ttb|T}}|Element type}} |
+ | {{dcl list item|{{ttb|a}}, {{ttb|b}}|Objects of type {{ttb|X}}}} | ||
{{dcl list end}} | {{dcl list end}} | ||
+ | |||
+ | ====Types==== | ||
+ | |||
+ | {|class=wikitable | ||
+ | !expression||return type||conditions||complexity | ||
+ | |- | ||
+ | |{{c|X::reverse_iterator}}|| iterator type whose value type is {{tt|T}} || {{c|reverse_iterator<iterator> }} || compile time | ||
+ | |- | ||
+ | |{{c|X::const_reverse_iterator}}|| iterator type whose value type is {{tt|const T}} || {{c|reverse_iterator<const_iterator> }} || compile time | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | ====Methods==== | ||
+ | |||
+ | {|class=wikitable | ||
+ | !expression||return type||conditions||complexity | ||
+ | |- | ||
+ | |{{c|a.rbegin()}}|| {{c|reverse_iterator;}} {{c|const_reverse_iterator}} for constant {{tt|a}} || {{c|reverse_iterator(end())}} || constant | ||
+ | |- | ||
+ | |{{c|a.rend()}}|| {{c|reverse_iterator;}} {{c|const_reverse_iterator}} for constant {{tt|a}} || {{c|reverse_iterator(begin())}} || constant | ||
+ | |- | ||
+ | |{{c|a.crbegin()}}|| {{c|const_reverse_iterator}} || {{c|const_cast<X const&>(a).rbegin();}} || constant | ||
+ | |- | ||
+ | |{{c|a.crend()}}|| {{c|const_reverse_iterator}} || {{c|const_cast<X const&>(a).rend();}} || constant | ||
+ | |- | ||
+ | |} | ||
+ | |||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | | The following example | + | | The following example iterates over a vector (which has random-access iterators) in reverse. |
| code= | | code= | ||
− | |||
− | |||
− | |||
#include <vector> | #include <vector> | ||
− | #include | + | #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 | |
− | for(vector< | + | 1 |
− | + | 4 | |
− | cout << * | + | 1 |
− | } | }} | + | 3 |
+ | }} |
Revision as of 07:16, 24 December 2012
Template:cpp/concept/title Template:cpp/concept/navbar
A ReversibleContainer
is a Template:concept that has iterators that meet the requirements of either Template:concept or Template:concept. Such iterators allow a ReversibleContainer
to be iterated over in reverse.
Contents |
Requirements
X
|
Container type |
T
|
Element type |
a , b
|
Objects of type X
|
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 | iterator type whose value type is const T |
reverse_iterator<const_iterator> | compile time |
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 |
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