Easyалгоритмы
Чем std::find_if полезен и какие правила?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::find_if(first, last, pred) — возвращает итератор на первый элемент, для которого pred(element) == true, или last если не найден. Сложность O(n).
std::vector<int> v{1, 2, 3, 4, 5};
auto it = std::find_if(v.begin(), v.end(),
[](int x) { return x > 3; });
if (it != v.end()) {
// *it == 4 — первый подходящий
}
// С C++20: std::ranges::find_if(v, pred);- Похожие:
std::find(значение),find_if_not(отрицание),find_first_of(любой из набора); - Для отсортированных диапазонов —
std::lower_bound/upper_bound(O(log n)); - Если ищете часто — отсортируйте и binary search, или
unordered_setдля O(1) membership.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.