From Jason Turner

[alg.swap]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpyo97pl57/{from.md → to.md} +35 -11
tmp/tmpyo97pl57/{from.md → to.md} RENAMED
@@ -1,35 +1,59 @@
1
  ### Swap <a id="alg.swap">[[alg.swap]]</a>
2
 
3
  ``` cpp
4
  template<class ForwardIterator1, class ForwardIterator2>
5
- ForwardIterator2
6
  swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,
7
  ForwardIterator2 first2);
8
  template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
9
  ForwardIterator2
10
  swap_ranges(ExecutionPolicy&& exec,
11
  ForwardIterator1 first1, ForwardIterator1 last1,
12
  ForwardIterator2 first2);
 
 
 
 
 
 
 
 
 
13
  ```
14
 
15
- *Requires:* The two ranges \[`first1`, `last1`) and \[`first2`,
16
- `first2 + (last1 - first1)`) shall not overlap. `*(first1 + n)` shall be
17
- swappable with ([[swappable.requirements]]) `*(first2 + n)`.
18
 
19
- *Effects:* For each non-negative integer `n < (last1 - first1)`
20
- performs: `swap(*(first1 + n), *(first2 + n))`.
 
21
 
22
- *Returns:* `first2 + (last1 - first1)`.
 
 
 
23
 
24
- *Complexity:* Exactly `last1 - first1` swaps.
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  ``` cpp
27
  template<class ForwardIterator1, class ForwardIterator2>
28
- void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
29
  ```
30
 
31
- *Requires:* `a` and `b` shall be dereferenceable. `*a` shall be
32
- swappable with ([[swappable.requirements]]) `*b`.
33
 
34
  *Effects:* As if by `swap(*a, *b)`.
35
 
 
1
  ### Swap <a id="alg.swap">[[alg.swap]]</a>
2
 
3
  ``` cpp
4
  template<class ForwardIterator1, class ForwardIterator2>
5
+ constexpr ForwardIterator2
6
  swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,
7
  ForwardIterator2 first2);
8
  template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
9
  ForwardIterator2
10
  swap_ranges(ExecutionPolicy&& exec,
11
  ForwardIterator1 first1, ForwardIterator1 last1,
12
  ForwardIterator2 first2);
13
+
14
+ template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2>
15
+ requires indirectly_swappable<I1, I2>
16
+ constexpr ranges::swap_ranges_result<I1, I2>
17
+ ranges::swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2);
18
+ template<input_range R1, input_range R2>
19
+ requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>>
20
+ constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>>
21
+ ranges::swap_ranges(R1&& r1, R2&& r2);
22
  ```
23
 
24
+ Let:
 
 
25
 
26
+ - `last2` be `first2 + (last1 - first1)` for the overloads with no
27
+ parameter named `last2`;
28
+ - M be min(`last1 - first1`, `last2 - first2`).
29
 
30
+ *Preconditions:* The two ranges \[`first1`, `last1`) and \[`first2`,
31
+ `last2`) do not overlap. For the overloads in namespace `std`,
32
+ `*(first1 + `n`)` is swappable with [[swappable.requirements]]
33
+ `*(first2 + `n`)`.
34
 
35
+ *Effects:* For each non-negative integer n < M performs:
36
+
37
+ - `swap(*(first1 + `n`), *(first2 + `n`))` for the overloads in
38
+ namespace `std`;
39
+ - `ranges::iter_swap(first1 + `n`, first2 + `n`)` for the overloads in
40
+ namespace `ranges`.
41
+
42
+ *Returns:*
43
+
44
+ - `last2` for the overloads in namespace `std`.
45
+ - `{first1 + `M`, first2 + `M`}` for the overloads in namespace
46
+ `ranges`.
47
+
48
+ *Complexity:* Exactly M swaps.
49
 
50
  ``` cpp
51
  template<class ForwardIterator1, class ForwardIterator2>
52
+ constexpr void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
53
  ```
54
 
55
+ *Preconditions:* `a` and `b` are dereferenceable. `*a` is swappable
56
+ with [[swappable.requirements]] `*b`.
57
 
58
  *Effects:* As if by `swap(*a, *b)`.
59