std::iter_swap in C++

std::swap is used for swapping of elements between two containers. One of the other way of doing this same thing is facilitated by std::iter_swap, which as the name suggests is used for swapping the elements with the help of an iterator.

It simply exchanges the values of the elements pointed to by the iterators. If we look at its internal working, we will find that this function itself uses std::swap().

Syntax:



void iter_swap (ForwardIterator1 a, ForwardIterator2 b);

Here, a and b are forward iterators.

Returns: It has a void return type, so it does not 
return any value.

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to demonstrate the use of std::iter_swap
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    // Declaring first vector
    vector<int> v1;
    int i;
  
    for (i = 0; i < 10; ++i) {
        v1.push_back(i);
    }
    // v1 contains 0 1 2 3 4 5 6 7 8 9
  
    vector<int>::iterator i1, i2;
  
    i1 = v1.begin();
    i2 = v1.end() - 1;
  
    // Performing swap between first and last element
    // of vector
    std::iter_swap(i1, i2);
  
    // Displaying v1 after swapping
    for (i = 0; i < 10; ++i) {
        cout << v1[i] << " ";
    }
  
    return 0;
}

chevron_right


Output:

9 1 2 3 4 5 6 7 8 0

Here, in this program we have swapped elements from v1 with the help of two iterators, one of them pointing at the beginning of v1 and the other one pointing at the end of v1.

std::iter_swap vs std::swap

After coming to know that iter_swap is used to swap the values, just like std::swap(), the question now arises is why should we learn iter_swap, if we have already something called swap(). Some of the reasons in support of iter_swap are:

  • Optimization for node-based sequences: Most STL algorithms operate on iterator ranges. It therefore makes sense to use iter_swap when swapping elements within those ranges, swapping the elements pointed to by two iterators. This allows optimization for node-based sequences such as std::list, whereby the nodes are just relinked, rather than the data actually being swapped.
  • Use in STL definition: Some STL algorithm like std::reverse involve the use of std::iter_swap in its definition. Therefore, one should have knowledge about this in order to understand these definition.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Definition of std::reverse()
    template void reverse(BidirectionalIterator first, 
                           BidirectionalIterator last)
    {
        while ((first != last) && (first != --last)) 
        {
            std::iter_swap(first, last);
            ++first;
        }
    }

    chevron_right

    
    

  • Providing abstraction: iter_swap usefully encapsulates the part of the swappable interface which you would otherwise implement every time.

This article is contributed by Mrigendra Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : nidhi_biet

Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.