Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

find_if

Busca la posición de la primera aparición de un elemento en un intervalo que cumple una condición especificada.

template<class InputIterator, class Predicate> InputIterator find_if(InputIterator first, InputIterator last,        Predicate pred);

first

Iterador de entrada que dirige a la posición del primer elemento del intervalo en el que se buscará.

last

Iterador de entrada que dirige a la posición situada una posición después del último elemento del intervalo en el que se buscará.

pred

Objeto de función de predicado definido por el usuario o expresión lambda que define la condición que debe cumplir el elemento que se buscará. Un predicado toma un solo argumento y devuelve true (se cumple) o false (no se cumple). La signatura de pred debe ser, en la práctica, bool pred(const T& arg);, donde T es un tipo al que InputIterator se puede convertir implícitamente al desreferenciarse. La palabra clave const solo se muestra para ilustrar el hecho de que el objeto de función o la lambda no debería modificar el argumento.

Iterador de entrada que hace referencia al primer elemento del intervalo que cumple la condición especificada por el predicado (el predicado devuelve true). Si no se encuentra ningún elemento que cumpla el predicado, devuelve last.

Esta función de plantilla es una generalización del algoritmo find donde el predicado “es igual a un valor específico” se reemplaza por cualquier predicado. Para ver información sobre la operación lógica opuesta (buscar el primer elemento que no cumple el predicado), consulte find_if_not.

// cl.exe /W4 /nologo /EHsc /MTd
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

template <typename S> void print(const S& s) {
    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }
    cout << endl;
}

// Test std::find()
template <class InputIterator, class T>
void find_print_result(InputIterator first, InputIterator last, const T& value) {

    // call <algorithm> std::find()
    auto p = find(first, last, value);

    cout << "value " << value;
    if (p == last) {
        cout << " not found." << endl;
    } else {
        cout << " found." << endl;
    }
}

// Test std::find_if()
template <class InputIterator, class Predicate>
void find_if_print_result(InputIterator first, InputIterator last,
    Predicate Pred, const string& Str) {

    // call <algorithm> std::find_if()
    auto p = find_if(first, last, Pred);

    if (p == last) {
        cout << Str << " not found." << endl;
    } else {
        cout << "first " << Str << " found: " << *p << endl;
    }
}

// Function to use as the UnaryPredicate argument to find_if() in this example
bool is_odd_int(int i) {
    return ((i % 2) != 0);
}

int main()
{
    // Test using a plain old array.
    const int x[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    cout << "array x[] contents: ";
    print(x);
    // Using non-member std::begin()/std::end() to get input iterators for the plain old array.
    cout << "Test std::find() with array..." << endl;
    find_print_result(begin(x), end(x), 10);
    find_print_result(begin(x), end(x), 42);
    cout << "Test std::find_if() with array..." << endl;
    find_if_print_result(begin(x), end(x), is_odd_int, "odd integer"); // function name
    find_if_print_result(begin(x), end(x), // lambda
        [](int i){ return ((i % 2) == 0); }, "even integer");

    // Test using a vector.
    vector<int> v;
    for (int i = 0; i < 10; ++i) {
        v.push_back((i + 1) * 10);
    }
    cout << endl << "vector v contents: ";
    print(v);
    cout << "Test std::find() with vector..." << endl;
    find_print_result(v.begin(), v.end(), 20);
    find_print_result(v.begin(), v.end(), 12);
    cout << "Test std::find_if() with vector..." << endl;
    find_if_print_result(v.begin(), v.end(), is_odd_int, "odd integer");
    find_if_print_result(v.begin(), v.end(), // lambda
        [](int i){ return ((i % 2) == 0); }, "even integer");
}

            
              contenido de la matriz x[]: (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
Prueba de std::find() con la matriz…
              valor 10 encontrado.  valor 42 no encontrado.  Prueba de std::find_if() con la matriz…  primer entero impar encontrado: 1
primer entero par encontrado: 2

contenido del vector v: (10) (20) (30) (40) (50) (60) (70) (80) (90) (100)
Prueba de std::find() con el vector…  valor 20 encontrado.  valor 12 no encontrado.  Prueba de std::find_if() con el vector…  no se encontró ningún entero impar.  primer entero par encontrado: 10  

Encabezado: <algorithm>

Espacio de nombres: std

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft