From Jason Turner

[range.reverse.overview]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmptzbrosan/{from.md → to.md} +40 -0
tmp/tmptzbrosan/{from.md → to.md} RENAMED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Overview <a id="range.reverse.overview">[[range.reverse.overview]]</a>
2
+
3
+ `reverse_view` takes a bidirectional `view` and produces another `view`
4
+ that iterates the same elements in reverse order.
5
+
6
+ The name `views::reverse` denotes a range adaptor object
7
+ [[range.adaptor.object]]. Given a subexpression `E`, the expression
8
+ `views::reverse(E)` is expression-equivalent to:
9
+
10
+ - If the type of `E` is a (possibly cv-qualified) specialization of
11
+ `reverse_view`, equivalent to `E.base()`.
12
+ - Otherwise, if the type of `E` is cv-qualified
13
+ ``` cpp
14
+ subrange<reverse_iterator<I>, reverse_iterator<I>, K>
15
+ ```
16
+
17
+ for some iterator type `I` and value `K` of type `subrange_kind`,
18
+ - if `K` is `subrange_kind::sized`, equivalent to:
19
+ ``` cpp
20
+ subrange<I, I, K>(E.end().base(), E.begin().base(), E.size())
21
+ ```
22
+ - otherwise, equivalent to:
23
+ ``` cpp
24
+ subrange<I, I, K>(E.end().base(), E.begin().base())
25
+ ```
26
+
27
+ However, in either case `E` is evaluated only once.
28
+ - Otherwise, equivalent to `reverse_view{E}`.
29
+
30
+ [*Example 1*:
31
+
32
+ ``` cpp
33
+ vector<int> is {0,1,2,3,4};
34
+ reverse_view rv {is};
35
+ for (int i : rv)
36
+ cout << i << ' '; // prints: 4 3 2 1 0
37
+ ```
38
+
39
+ — *end example*]
40
+