Функция find_if
Функция find_if ищет первый элемент в диапазоне,
который удовлетворяет заданному условию. В первый и
второй параметры мы передаем итераторы начала и конца
диапазона, а в третий - предикат (функцию или лямбду),
возвращающий true или false. Если элемент
найден, функция возвращает итератор на него, иначе
возвращает итератор на конец диапазона.
Синтаксис
find_if(first, last, pred)
Пример
Давайте найдем первый элемент вектора, который
больше 3:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
auto it = find_if(vec.begin(), vec.end(),
[](int x) { return x > 3; });
if (it != vec.end()) {
cout << *it << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
4
Пример
Давайте найдем первую строку в векторе, длина
которой больше 1:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> vec = {"a", "b", "c", "d", "e"};
auto it = find_if(vec.begin(), vec.end(),
[](const string& s) { return s.length() > 1; });
if (it != vec.end()) {
cout << *it << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
"not found"
Пример
Давайте найдем первый четный элемент вектора и выведем его индекс:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec = {1, 3, 4, 5, 6};
auto it = find_if(vec.begin(), vec.end(),
[](int x) { return x % 2 == 0; });
if (it != vec.end()) {
cout << "index: " << (it - vec.begin()) << endl;
cout << "value: " << *it << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
"index: 2"
"value: 4"
Смотрите также
-
функция
find,
которая ищет элемент по значению -
функция
find_if_not,
которая ищет элемент, не удовлетворяющий условию -
функция
count_if,
которая считает элементы по условию -
функция
any_of,
которая проверяет, есть ли элемент по условию