std::ranges::find
Актуально для C++26.
#include <algorithm>
Актуально на 2025-05-18.
Define overload #1
template<std::input_iterator I, std::sentinel_for<I> S, class Proj = std::identity, class T = std::projected_value_t<I, Proj>> requires std::indirect_binary_predicate<ranges::equal_to, std::projected<I, Proj>, const T*> constexpr I find(I first, S last, const T& value, Proj proj = {});
Ищет в диапазоне [first, last] значение "value".
Example, possible implementation
Define overload #2
template<ranges::input_range R, class Proj = std::identity, class T = std::projected_value_t<ranges::iterator_t<R>, Proj>> requires std::indirect_binary_predicate<ranges::equal_to, std::projected<ranges::iterator_t<R>, Proj>, const T*> constexpr ranges::borrowed_iterator_t<R> find(R&& r, const T& value, Proj proj = {});
Ищет в диапазоне "r" значение "value".
Example, possible implementation
Возвращаемое значение
Вернёт итератор на первый найденный элемент или "last", если такого элемента не нашлось.
Notes
- Поиск выполняется последовательным перебором, начиная с позиции "first".
Сложность
Линейная - O(n).
Examples
Example 1:
#include <iostream> #include <string> #include <algorithm> namespace ranges = std::ranges; int main() { std::string str = "hello world!"; auto find_it = ranges::find(str, 'w'); if (find_it != std::end(str)) { std::cout << std::string_view(find_it, std::end(str)) << std::endl; } else { std::cout << "Нет такой буквы!" << std::endl; } return 0; }
world!
Changelog
C++26
Изменены параметры шаблонов функций (#1 и #2).В предыдущих редакциях, перегрузка #1 имела следующий шаблон функции:
template<std::input_iterator I, std::sentinel_for<I> S,class T, class Proj = std::identity> requires std::indirect_binary_predicate<ranges::equal_to, std::projected<I, Proj>, const T*> constexpr I find(I first, S last, const T& value, Proj proj = {});
перегрузка #2:
template<ranges::input_range R, class T, class Proj = std::identity> requires std::indirect_binary_predicate<ranges::equal_to, std::projected<ranges::iterator_t<R>, Proj>, const T*> constexpr ranges::borrowed_iterator_t<R> find(R&& r, const T& value, Proj proj = {});
C++20
Введён в стандарт.See also
TODO
This page was last modified on 2025-05-18