Функция find_if_not
Функция find_if_not ищет первый элемент в диапазоне,
который не удовлетворяет заданному условию (предикату).
В первый параметр мы передаём итератор начала диапазона,
во второй - итератор конца диапазона, а в третий -
предикат (функцию или лямбда-выражение), которому элемент
не должен удовлетворять. Функция возвращает итератор на
найденный элемент или итератор конца диапазона, если все
элементы удовлетворяют условию.
Синтаксис
find_if_not(first, last, pred)
Пример
Давайте найдём первый элемент вектора, который не является чётным:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {2, 4, 5, 6, 8};
auto it = find_if_not(v.begin(), v.end(), [](int x) {
return x % 2 == 0;
});
if (it != v.end()) {
cout << "First odd: " << *it << endl;
} else {
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"First odd: 5"
Пример
Давайте найдём первый элемент вектора, который не
начинается с символа 'a':
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> v = {"abc", "ade", "bcd", "afg"};
auto it = find_if_not(v.begin(), v.end(), [](const string& s) {
return s[0] == 'a';
});
if (it != v.end()) {
cout << "Found: " << *it << endl;
} else {
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Found: bcd"
Пример
Давайте проверим случай, когда все элементы удовлетворяют условию - функция вернёт итератор на конец диапазона:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {2, 4, 6, 8};
auto it = find_if_not(v.begin(), v.end(), [](int x) {
return x % 2 == 0;
});
if (it != v.end()) {
cout << "Found: " << *it << endl;
} else {
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Not found"