límite_superior en C++ – Part 1

upper_bound() es una función de biblioteca estándar en C++ definida en el encabezado. Devuelve un iterador que apunta al primer elemento del rango [primero, último] que es mayor que el valor, o último si no se encuentra dicho elemento. Los elementos del rango ya deben estar ordenados o al menos particionados con respecto a val.

Modelo :

Sintaxis 1:
ForwardIterator upper_bound (ForwardIterator primero, ForwardIterator último, const T& val);

Sintaxis 2:
ForwardIterator upper_bound (ForwardIterator primero, ForwardIterator último, const T& val, Compare comp);

primero, último : el rango utilizado es [primero, último), que contiene todos los elementos entre primero y último, incluido el elemento señalado por primero pero no el elemento señalado por último.

val: Valor del límite superior a buscar en el rango.

comp: Función binaria que acepta dos argumentos (el primero del tipo apuntado por ForwardIterator, y el segundo, siempre val), y devuelve un valor convertible a bool. La función no modificará ninguno de sus argumentos. Puede ser un puntero de función
o un objeto de función.

Tipo de retorno: un iterador al límite superior de val en el rango. Si todos los elementos en el rango se comparan menos que val, la función regresa en último lugar.

Ejemplos:

Input : 10 20 30 30 40 50
Output : upper_bound for element 30 is at index 4

Input : 10 20 30 40 50
Output : upper_bound for element 45 is at index 4

Input : 10 20 30 40 50
Output : upper_bound for element 60 is at index 5

A continuación se muestran algunos programas de C++ para ilustrar el uso de std::upper_bound :

// CPP program to illustrate using 
// std :: upper_bound with vectors
#include <bits/stdc++.h>
  
// Driver code
int main()
{
    std::vector<int> v{ 10, 20, 30, 40, 50 };
  
    // Print vector
    std::cout << "Vector contains :";
    for (int i = 0; i < v.size(); i++)
        std::cout << " " << v[i];
    std::cout << "\n";
  
    std::vector<int>::iterator upper1, upper2;
  
    // std :: upper_bound
    upper1 = std::upper_bound(v.begin(), v.end(), 35);
    upper2 = std::upper_bound(v.begin(), v.end(), 45);
  
    std::cout << "\nupper_bound for element 35 is at position : " 
              << (upper1 - v.begin());
    std::cout << "\nupper_bound for element 45 is at position : "
              << (upper2 - v.begin());
  
    return 0;
}

Producción:

Vector contains : 10 20 30 40 50
upper_bound for element 35 is at position : 3
upper_bound for element 45 is at position : 4
// CPP program to illustrate using 
// std :: upper_bound with arrays
#include <bits/stdc++.h>
using namespace std;
  
// Main Function
int main()
{
    int arr[] = { 10, 20, 30, 40, 50 };
  
    // Print elements of array
    cout << "Array contains :";
    for (int i = 0; i < 5; i++)
        cout << " " << arr[i];
    cout << "\n";
  
    // using upper_bound
    int upper1 = upper_bound(arr, arr+5, 35) - arr;
    int upper2 = upper_bound(arr, arr+5, 45) - arr;
  
    cout << "\nupper_bound for element 35 is at position : " 
              << (upper1);
    cout << "\nupper_bound for element 45 is at position : "
              << (upper2);
  
    return 0;
}

Producción:

Array contains : 10 20 30 40 50
upper_bound for element 35 is at position : 3
upper_bound for element 45 is at position : 4

Complejidad temporal: el número de comparaciones realizadas es logarítmico en la distancia entre la primera y la última. es decir, (como mucho log2(último – primero) + O(1) comparaciones).

Puntos importantes

  • std::upper_bound() devuelve un iterador al límite superior del valor que se le pasa.
  • std::upper_bound() solo funciona con secuencias ordenadas. es decir, vector con elementos ordenados o array con elementos ordenados.

Este artículo es una contribución de Rohit Thapliyal . 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 *