Cálculo del índice usando punteros devueltos por funciones STL en C++

Muchas funciones integradas en C++ devuelven los punteros a la posición en la memoria que proporciona una dirección del número deseado pero no tiene relación con el índice real en un contenedor del valor calculado. Por ejemplo, para encontrar el elemento máximo en un código, usamos std::max_element() , que devuelve la dirección en la memoria, no el índice del elemento deseado. A veces, necesitamos el índice correspondiente a esa dirección, por lo que el siguiente ejemplo demuestra cómo podemos hacer eso,

CPP

// C++ code to demonstrate return value of
// max_element()
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    // initializing vector
    vector<int> vi = { 1, 4, 5, 6, 3 };
 
    // printing max element
    cout << "The max element is : "
         << (*max_element(vi.begin(), vi.end()));
 
    // printing position
    // prints position in memory
    cout << "\nThe position of maximum element is : ";
    printf("%d", max_element(vi.begin(), vi.end()));
}

Producción

The max element is : 6
The position of maximum element is : 2015522492

El resultado no se ve bien en el resultado anterior, por lo que existe un requisito para tener formas de calcular el índice exacto de la posición del elemento deseado en el contenedor especificado. Estas formas son:

1) Restar el primer iterador

2) Usando std::distancia()

Restar el primer iterador

En este método, simplemente restamos el puntero de inicio del contenedor , en el caso de los vectores, su iterador » begin() » que apunta a la dirección del primer elemento del contenedor, restando esto podemos obtener el índice exacto del valor requerido escribir el contenedor.

CPP

// C++ code to demonstrate ways to print exact
// position subtracting first iterator
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // initializing vector
    vector<int> vi = { 1, 4, 5, 6, 3 };
 
    // printing max element
    cout << "The max element is : "
         << (*max_element(vi.begin(), vi.end()));
 
    // printing position
    // prints wanted position
    cout << "\nThe position of maximum element is : "
         << max_element(vi.begin(), vi.end()) - vi.begin();
    ;
    return 0;
}
Producción

The max element is : 6
The position of maximum element is : 3

Usando std::distancia()

Usar distancia() también es otra alternativa para calcular la posición deseada, pasando por alto el primer iterador como primer argumento y la posición deseada como segundo argumento .

CPP

// C++ code to demonstrate ways to print exact
// position using distance()
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // initializing vector
    vector<int> vi = { 1, 4, 5, 6, 3 };
 
    // printing max element
    cout << "The max element is : "
         << (*max_element(vi.begin(), vi.end()));
 
    // printing position
    // prints wanted position
    cout << "\nThe position of maximum element is : ";
    cout<< distance(vi.begin(),max_element(vi.begin(), vi.end()));
    return 0;
}
Producción

The max element is : 6
The position of maximum element is : 3

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 manjeet_04 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 *