From Jason Turner

[alg.move]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp1_ivsyfn/{from.md → to.md} +64 -24
tmp/tmp1_ivsyfn/{from.md → to.md} RENAMED
@@ -1,57 +1,97 @@
1
  ### Move <a id="alg.move">[[alg.move]]</a>
2
 
3
  ``` cpp
4
  template<class InputIterator, class OutputIterator>
5
- OutputIterator move(InputIterator first, InputIterator last, OutputIterator result);
 
 
 
 
 
 
 
 
 
 
6
  ```
7
 
8
- *Requires:* `result` shall not be in the range \[`first`, `last`).
 
 
 
 
 
 
 
 
9
 
10
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
11
- \[`result`, `result + (last - first)`) starting from first and
12
- proceeding to last. For each non-negative integer `n < (last-first)`,
13
- performs `*(result + n)` `= std::move(*(first + n))`.
14
 
15
- *Returns:* `result + (last - first)`.
16
 
17
- *Complexity:* Exactly `last - first` move assignments.
 
 
 
18
 
19
  ``` cpp
20
  template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
21
  ForwardIterator2 move(ExecutionPolicy&& policy,
22
  ForwardIterator1 first, ForwardIterator1 last,
23
  ForwardIterator2 result);
24
  ```
25
 
26
- *Requires:* The ranges \[`first`, `last`) and \[`result`,
27
- `result + (last - first)`) shall not overlap.
 
 
28
 
29
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
30
- \[`result`, `result + (last - first)`). For each non-negative integer
31
- `n < (last - first)`, performs
32
- `*(result + n) = std::move(*(first + n))`.
33
 
34
- *Returns:* `result + (last - first)`.
35
 
36
- *Complexity:* Exactly `last - first` assignments.
37
 
38
  ``` cpp
39
  template<class BidirectionalIterator1, class BidirectionalIterator2>
40
- BidirectionalIterator2
41
- move_backward(BidirectionalIterator1 first,
42
- BidirectionalIterator1 last,
43
  BidirectionalIterator2 result);
 
 
 
 
 
 
 
 
 
44
  ```
45
 
46
- *Requires:* `result` shall not be in the range (`first`, `last`).
 
 
 
 
 
 
 
 
47
 
48
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
49
- \[`result - (last-first)`, `result`) starting from `last - 1` and
50
- proceeding to first.[^3] For each positive integer
51
- `n <= (last - first)`, performs
52
- `*(result - n) = std::move(*(last - n))`.
53
 
54
- *Returns:* `result - (last - first)`.
55
 
56
- *Complexity:* Exactly `last - first` assignments.
 
 
 
57
 
 
1
  ### Move <a id="alg.move">[[alg.move]]</a>
2
 
3
  ``` cpp
4
  template<class InputIterator, class OutputIterator>
5
+ constexpr OutputIterator move(InputIterator first, InputIterator last,
6
+ OutputIterator result);
7
+
8
+ template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
9
+ requires indirectly_movable<I, O>
10
+ constexpr ranges::move_result<I, O>
11
+ ranges::move(I first, S last, O result);
12
+ template<input_range R, weakly_incrementable O>
13
+ requires indirectly_movable<iterator_t<R>, O>
14
+ constexpr ranges::move_result<borrowed_iterator_t<R>, O>
15
+ ranges::move(R&& r, O result);
16
  ```
17
 
18
+ Let E be
19
+
20
+ - `std::move(*(first + `n`))` for the overload in namespace `std`;
21
+ - `ranges::iter_move(first + `n`)` for the overloads in namespace
22
+ `ranges`.
23
+
24
+ Let N be `last - first`.
25
+
26
+ *Preconditions:* `result` is not in the range \[`first`, `last`).
27
 
28
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
29
+ \[`result`, `result + `N) starting from `first` and proceeding to
30
+ `last`. For each non-negative integer n < N, performs
31
+ `*(result + `n`) = `E.
32
 
33
+ *Returns:*
34
 
35
+ - `result + `N for the overload in namespace `std`.
36
+ - `{last, result + `N`}` for the overloads in namespace `ranges`.
37
+
38
+ *Complexity:* Exactly N assignments.
39
 
40
  ``` cpp
41
  template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
42
  ForwardIterator2 move(ExecutionPolicy&& policy,
43
  ForwardIterator1 first, ForwardIterator1 last,
44
  ForwardIterator2 result);
45
  ```
46
 
47
+ Let N be `last - first`.
48
+
49
+ *Preconditions:* The ranges \[`first`, `last`) and \[`result`,
50
+ `result + `N) do not overlap.
51
 
52
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
53
+ \[`result`, `result + `N). For each non-negative integer n < N, performs
54
+ `*(result + `n`) = std::move(*(first + `n`))`.
 
55
 
56
+ *Returns:* `result + `N.
57
 
58
+ *Complexity:* Exactly N assignments.
59
 
60
  ``` cpp
61
  template<class BidirectionalIterator1, class BidirectionalIterator2>
62
+ constexpr BidirectionalIterator2
63
+ move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last,
 
64
  BidirectionalIterator2 result);
65
+
66
+ template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
67
+ requires indirectly_movable<I1, I2>
68
+ constexpr ranges::move_backward_result<I1, I2>
69
+ ranges::move_backward(I1 first, S1 last, I2 result);
70
+ template<bidirectional_range R, bidirectional_iterator I>
71
+ requires indirectly_movable<iterator_t<R>, I>
72
+ constexpr ranges::move_backward_result<borrowed_iterator_t<R>, I>
73
+ ranges::move_backward(R&& r, I result);
74
  ```
75
 
76
+ Let E be
77
+
78
+ - `std::move(*(last - `n`))` for the overload in namespace `std`;
79
+ - `ranges::iter_move(last - `n`)` for the overloads in namespace
80
+ `ranges`.
81
+
82
+ Let N be `last - first`.
83
+
84
+ *Preconditions:* `result` is not in the range (`first`, `last`).
85
 
86
  *Effects:* Moves elements in the range \[`first`, `last`) into the range
87
+ \[`result - `N, `result`) starting from `last - 1` and proceeding to
88
+ `first`. [^3] For each positive integer n ≤ N, performs
89
+ `*(result - `n`) = `E.
 
90
 
91
+ *Returns:*
92
 
93
+ - `result - `N for the overload in namespace `std`.
94
+ - `{last, result - `N`}` for the overloads in namespace `ranges`.
95
+
96
+ *Complexity:* Exactly N assignments.
97