std::distancia en C++

Si tenemos dos iteradores y queremos encontrar el número total. de elementos entre los dos iteradores, eso lo facilita std::distance() , definido dentro del archivo de encabezado.
Tiene una característica importante que, al igual que tenemos vectores en la ciencia, que tienen tanto magnitud como dirección, std::distance también tiene una dirección asociada. Esto significa que calcular la distancia entre el primero y el último y luego calcular la distancia entre el último y el primero no será lo mismo, ya que en el segundo caso, tendrá un signo negativo asociado, ya que estamos retrocediendo. 
Sintaxis: 
 

std::distance(InputIterator first, InputIterator last)
Here, first and last are input iterators between which we have to calculate distance.

Returns: The number of elements between first and last.

Ejemplo: 
 

Input: v = 10 20 30 40 50
first pointing to v.begin() and last pointing to v.end()
Output: No. of elements: 5

CPP

// C++ program to demonstrate std::distance()
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
    vector<int> v;
    int i;
 
    for (i = 0; i < 10; ++i)
    {
        v.push_back(i);
    }
 
    /*v contains 0 1 2 3 4 5 6 7 8 9*/
 
    vector<int>::iterator first;
    vector<int>::iterator last;
 
    // first pointing to 0
    first = v.begin();
 
    // last pointing to 5
    last = v.begin() + 5;
 
    // Calculating no. of elements between first and last
    int num = std::distance(first, last);
 
    // Displaying num
    cout << num << "\n";
    return 0;
}

Producción: 
 

5

Aquí, el número total de elementos entre el primero (que apunta a 0) y el último (que apunta a 5) es 5, es decir, 0 1 2 3 4. Por lo tanto, el elemento al que apunta el último no ha sido contado por la distancia(). 
 

¿Qué sucede cuando invertimos el orden al calcular la distancia?

Ya que, cuenta el no. de elementos entre los dos iteradores de entrada, una cosa a tener en cuenta es que no cuenta el elemento al que apunta el último (si lo hay), al calcular la distancia, mientras que el elemento al que apunta el primero se cuenta en el rango es [primero,último).
 

CPP

// C++ program to demonstrate the use of std::distance
// with reverse order
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
    vector<int> v;
    int i;
 
    for (i = 0; i < 10; ++i)
    {
        v.push_back(i);
    }
 
    // Calculating no. of elements in vector v
    int num = std::distance(v.begin(), v.end());
 
    // Displaying num
    cout << num << "\n";
 
    // Calculating in reverse order
    num = std::distance(v.end(), v.begin());
 
    // Displaying num
    cout << num << "\n";
    return 0;
}

Producción: 
 

10
-10

Complejidad de tiempo: constante para iteradores de acceso aleatorio y O(n) para todos los demás iteradores.
Este artículo es una contribución de Mrigendra Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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 *