Namespaces
Variants
Views
Actions

std::swap_ranges

From cppreference.com
 
 
 
Defined in header <algorithm>
template< class ForwardIterator1, class ForwardIterator2 >

ForwardIterator2 swap_ranges( ForwardIterator1 first1,
                              ForwardIterator1 last1,

                              ForwardIterator2 first2 )

Exchanges elements between range [first1, last1) and another range starting at first2.

Contents

[edit] Parameters

first1, last1 - the first range of elements to swap
first2 - beginning of the second range of elements to swap

[edit] Return value

iterator to the element past the last element exchanged in the range beginning with first2.


[edit] Possible implementation

template<class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 swap_ranges(ForwardIterator1 first1, 
                             ForwardIterator1 last1, 
                             ForwardIterator2 first2)
{
    while (first1 != last1) {
        std::iter_swap(first1++, first2++);
    }
    return first2;
}

[edit] Example

Demonstrates swapping of subranges from different containers

#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::list<int> l = {-1, -2, -3, -4, -5};
 
    std::swap_ranges(v.begin(), v.begin()+3, l.begin());
 
    for(int n : v)
       std::cout << n << ' ';
    std::cout << '\n';
    for(int n : l)
       std::cout << n << ' ';
    std::cout << '\n';
}

Output:

-1 -2 -3 4 5
1 2 3 -4 -5

[edit] Complexity

linear in the distance between first and last

[edit] See also

swaps the elements pointed to by two iterators
(function template) [edit]
swaps the values of two objects
(function template) [edit]