6.0 KiB
[alg.swap]
26 Algorithms library [algorithms]
26.7 Mutating sequence operations [alg.modifying.operations]
26.7.3 Swap [alg.swap]
`template<class ForwardIterator1, class ForwardIterator2> constexpr ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2> ForwardIterator2 swap_ranges(ExecutionPolicy&& exec, ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);
template<input_iterator I1, sentinel_for S1, input_iterator I2, sentinel_for S2> requires indirectly_swappable<I1, I2> constexpr ranges::swap_ranges_result<I1, I2> ranges::swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2); template<input_range R1, input_range R2> requires indirectly_swappable<iterator_t, iterator_t> constexpr ranges::swap_ranges_result<borrowed_iterator_t, borrowed_iterator_t> ranges::swap_ranges(R1&& r1, R2&& r2);
template<execution-policy Ep, random_access_iterator I1, sized_sentinel_for S1, random_access_iterator I2, sized_sentinel_for S2> requires indirectly_swappable<I1, I2> ranges::swap_ranges_result<I1, I2> ranges::swap_ranges(Ep&& exec, I1 first1, S1 last1, I2 first2, S2 last2); template<execution-policy Ep, sized-random-access-range R1, sized-random-access-range R2> requires indirectly_swappable<iterator_t, iterator_t> ranges::swap_ranges_result<borrowed_iterator_t, borrowed_iterator_t> ranges::swap_ranges(Ep&& exec, R1&& r1, R2&& r2); `
Let:
last2 be first2 + (last1 - first1) for the overloads in namespace std with no parameter named last2;
M be min(last1 - first1, last2 - first2).
Preconditions: The two ranges [first1, last1) and [first2, last2) do not overlap.
For the overloads in namespace std,(first1 + n) is swappable with ([swappable.requirements])(first2 + n).
Effects: For each non-negative integer n<M performs:
swap(*(first1 + n), *(first2 + n)) for the overloads in namespace std;
ranges::iter_swap(first1 + n, first2 + n) for the overloads in namespace ranges.
Returns:
-
last2 for the overloads in namespace std.
-
{first1 + M, first2 + M} for the overloads in namespace ranges.
Complexity: Exactly M swaps.
template<class ForwardIterator1, class ForwardIterator2> constexpr void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
Preconditions: a and b are dereferenceable.
*a is swappable with ([swappable.requirements]) *b.
Effects: As if by swap(*a, *b).