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 |
-
|
| 16 |
-
`first2 + (last1 - first1)`) shall not overlap. `*(first1 + n)` shall be
|
| 17 |
-
swappable with ([[swappable.requirements]]) `*(first2 + n)`.
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
|
|
|
| 21 |
|
| 22 |
-
*
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
``` cpp
|
| 27 |
template<class ForwardIterator1, class ForwardIterator2>
|
| 28 |
-
void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
|
| 29 |
```
|
| 30 |
|
| 31 |
-
*
|
| 32 |
-
|
| 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 |
|