Что вернёт функция std::find_if в случае, если элемент не найден?

«Что вернёт функция std::find_if в случае, если элемент не найден?» — вопрос из категории STL, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Функция std::find_if возвращает итератор, равный переданному итератору конца диапазона (last). Это стандартное поведение для алгоритмов поиска в STL, означающее неудачу.

Пример использования и проверки:

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> numbers = {1, 3, 5, 7, 9};
    // Ищем первое чётное число
    auto it = std::find_if(numbers.begin(), numbers.end(),
                           [](int n) { return n % 2 == 0; });

    if (it == numbers.end()) {
        std::cout << "Чётное число не найдено.n";
    } else {
        std::cout << "Найдено: " << *it << 'n';
    }
    return 0;
}

Почему именно end()? Это соглашение STL обеспечивает единообразный и безопасный способ проверки результата поиска. Итератор end() всегда валиден для сравнения, но разыменовывать его нельзя.