std::search_n con ejemplo en C++

Requisito previo: std::search
std::search_n es un algoritmo STL definido dentro del archivo de encabezado, que se utiliza para buscar si un elemento dado satisface un predicado (igualdad si no se define tal predicado) un no dado. de veces consecutivamente con los elementos contenedores.

Busca en el rango [primero, último] una secuencia de elementos de conteo, cada uno de los cuales compara un valor dado (versión 1) o satisface un predicado (versión 2).

La función devuelve un iterador al primero de dichos elementos, o un iterador al último elemento del contenedor, si no se encuentra tal secuencia.

Las dos versiones de std::search_n se definen a continuación:

  1. Para comparar elementos usando ==:

    Sintaxis:

     ForwardIterator search_n (ForwardIterator first, ForwardIterator last,
                               Size count, const T& val);
    
    first: 
    Forward iterator to beginning of the container to be searched into.
    last: 
    Forward iterator to end of the container to be searched into.
    count: 
    Minimum number of successive elements to match.
    Size shall be (convertible to) an integral type.
    val: Individual value to be compared.
    Returns: 
    It returns an iterator to the first element of the sequence.
    If no such sequence is found, the function returns last.
    

    // C++ program to demonstrate the use of std::search_n
      
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int i, j;
      
        // Declaring the sequence to be searched into
        vector<int> v1 = { 1, 2, 3, 4, 5, 3, 3, 6, 7 };
      
        // Declaring the value to be searched for
        int v2 = 3;
      
        // Declaring an iterator for storing the returning pointer
        vector<int>::iterator i1;
      
        // Using std::search_n and storing the result in
        // iterator i1
        i1 = std::search_n(v1.begin(), v1.end(), 2, v2);
      
        // checking if iterator i1 contains end pointer of v1 or not
        if (i1 != v1.end()) {
            cout << "v2 is present consecutively 2 times at index "
                 << (i1 - v1.begin());
        } else {
            cout << "v2 is not present consecutively 2 times in "
                 << "vector v1";
        }
      
        return 0;
    }

    Producción:

    v2 is present consecutively 2 times at index 5
    
  2. Para comparar elementos usando un predicado:
    Sintaxis:
    ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,
                               Size count, const T& val, BinaryPredicate pred );
    
    All the arguments are same as previous template, just one more argument is added
    
    pred: Binary function that accepts two arguments 
    (one element from the sequence as first, and val as second),
     and returns a value convertible to bool. The value returned indicates whether 
    the element is considered a match in the context of this function.
    The function shall not modify any of its arguments. 
    This can either be a function pointer or a function object.
    
    Returns:
    It also returns value as per the previous version, i.e., 
    an iterator to the first element of the sequence, 
    satisfying a condition with respect to a given value.
    If no such sequence is found, the function returns last.

    // C++ program to demonstrate the use of std::search_n
    // with binary predicate
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
      
    // Defining the BinaryPredicate function
    bool pred(int i, int j)
    {
        if (i == j) {
            return 1;
        } else {
            return 0;
        }
    }
      
    int main()
    {
        int i, j;
      
        // Declaring the sequence to be searched into
        vector<int> v1 = { 1, 2, 3, 4, 5, 3, 3, 6, 7 };
      
        // Declaring the value to be compared to v1 based
        // on a given predicate
        int v2 = 3;
      
        // Declaring an iterator for storing the returning pointer
        vector<int>::iterator i1;
      
        // Using std::search_n and storing the result in
        // iterator i1
        i1 = std::search_n(v1.begin(), v1.end(), 2, v2, pred);
      
        // checking if iterator i1 contains end pointer of v1 or not
        if (i1 != v1.end()) {
            cout << "v2 is present consecutively 2 times at index "
                 << (i1 - v1.begin());
        } else {
            cout << "v2 is not present consecutively 2 times "
                 << "in vector v1";
        }
      
        return 0;
    }

    Producción:

    v2 is present consecutively 2 times at index 5
    

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 *