Sdílet prostřednictvím


find_if

Vyhledá pozici prvního výskytu prvku v rozsahu, který splňuje zadanou podmínku.

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

Parametry

  • first
    Vstupní iterace adresování pozice prvním elementem v rozsahu má proběhnout.

  • last
    Vstupní iterace adresování pozici jednoho za poslední prvek v rozsahu má proběhnout.

  • pred
    Objekt uživatelsky definované funkce predikátu nebo výrazu lambda definující podmínka, která musí být splněna elementem hledaným.Predikát přijímá jeden argument a vrací true (splněna) nebo false (není splněna).Podpis pred musí být efektivně bool pred(const T& arg);, kde T je typ, ke které InputIterator může být implicitně převeden, když přímo odkázat.const Klíčové slovo je zobrazen pouze pro ilustraci, že objekt funkce nebo lambda neměli měnit argument.

Vrácená hodnota

Vstupní iterační, který odkazuje na prvním elementem v rozsahu, který splňuje podmínka uvedená v predikátu (predikát má za následek true).Pokud žádný element není nalezen vyhovět predikát, vrátí last.

Poznámky

Tato funkce šablony je generalizaci algoritmus najít, nahradí predikát "rovná se konkrétní hodnotu" s jakékoli predikát.Logický opačným (Najít první prvek, který nesplňuje predikát), viz find_if_not.

Příklad

// 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");
}

Výstup

                             

Požadavky

Záhlaví: < algoritmus >

Obor názvů: std

Viz také

Referenční dokumentace

<algorithm>

adjacent_find

find (<algorithm>)

find_if_not

find_end

mismatch

search