estándar::iter_swap en C++

std::swap se utiliza para intercambiar elementos entre dos contenedores. Una de las otras formas de hacer lo mismo es facilitada por std::iter_swap, que como sugiere el nombre, se usa para intercambiar los elementos con la ayuda de un iterador.

Simplemente intercambia los valores de los elementos señalados por los iteradores. Si observamos su funcionamiento interno, encontraremos que esta función en sí misma usa std::swap() .

Sintaxis:

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.

// 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;
}

Producción:

9 1 2 3 4 5 6 7 8 0

Aquí, en este programa, hemos intercambiado elementos de v1 con la ayuda de dos iteradores, uno de ellos apuntando al comienzo de v1 y el otro apuntando al final de v1.

std::iter_swap frente a std::swap

Después de saber que iter_swap se usa para intercambiar los valores, al igual que std::swap(), surge la pregunta de por qué deberíamos aprender iter_swap, si ya tenemos algo llamado swap(). Algunas de las razones a favor de iter_swap son:

  • Optimización para secuencias basadas en Nodes: la mayoría de los algoritmos STL operan en rangos de iteradores. Por lo tanto, tiene sentido usar iter_swap al intercambiar elementos dentro de esos rangos, intercambiando los elementos señalados por dos iteradores. Esto permite la optimización para secuencias basadas en Nodes como std::list , en la que los Nodes simplemente se vuelven a vincular, en lugar de que los datos se intercambien.
  • Uso en la definición de STL: algunos algoritmos de STL como std::reverse implican el uso de std::iter_swap en su definición. Por lo tanto, uno debe tener conocimiento sobre esto para poder entender esta definición.

    // Definition of std::reverse()
    template void reverse(BidirectionalIterator first, 
                           BidirectionalIterator last)
    {
        while ((first != last) && (first != --last)) 
        {
            std::iter_swap(first, last);
            ++first;
        }
    }
  • Proporcionar abstracción: iter_swap encapsula de manera útil la parte de la interfaz intercambiable que, de otro modo, implementaría cada vez.

Este artículo es una contribución de Mrigendra Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *