std::ranges::find_first_of
Актуально для C++26.
#include <algorithm>
Актуально на 2025-05-21.
Define overload #1
template<input_iterator I1, sentinel_for<I1> S1,
forward_iterator I2, sentinel_for<I2> S2,
class Pred = ranges::equal_to, class Proj1 = identity,
class Proj2 = identity>
requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2>
constexpr I1
find_first_of(I1 first1, S1 last1, I2 first2, S2 last2,
Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
Ищет в диапазоне [first1, last1] первый элемент, из диапазона [first2, last2].
Example, possible implementation
Define overload #2
template<input_range R1, forward_range R2,
class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity>
requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2>
constexpr borrowed_iterator_t<R1>
find_first_of(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
Ищет в диапазоне "r1" первый элемент, из диапазона "r2".
Example, possible implementation
Возвращаемое значение
Вернёт итератор на первый найденный элемент, или last1, если нет совпадений.
Notes
- Поиск выполняется последовательно, начиная с позиции "first1".
Сложность
Линейная - O(n).
Examples
Example 1:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
namespace ranges = std::ranges;
int main()
{
auto f = {'!', '_', '1'};
std::string str = "hel1o_world!";
auto find_it = ranges::find_first_of(str, f);
if (find_it != str.end())
{
std::cout << std::string_view(find_it, str.end()) << std::endl;
}
else
{
std::cout << "No matches." << std::endl;
}
return 0;
}
1o_world!
Changelog
C++20
Введён в стандарт.See also
TODO
This page was last modified on 2025-05-21