@@ -198,6 +198,47 @@ Element Search Operations
198198 std::ranges::borrowed_iterator_t<R>
199199 adjacent_find (ExecutionPolicy&& pol, R&& r, Pred pred = {}, Proj proj = {});
200200
201+ // contains
202+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
203+ typename Proj = std::identity,
204+ typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
205+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
206+ std::ranges::sized_range<R> &&
207+ std::indirect_binary_predicate< std::ranges::equal_to,
208+ std::projected<std::ranges::iterator_t<R>, Proj>,
209+ const T* >
210+ bool contains (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {});
211+
212+ // find_last
213+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
214+ typename Proj = std::identity,
215+ typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
216+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
217+ std::ranges::sized_range<R> &&
218+ std::indirect_binary_predicate< std::ranges::equal_to,
219+ std::projected<std::ranges::iterator_t<R>, Proj>,
220+ const T* >
221+ std::ranges::borrowed_subrange_t<R>
222+ find_last (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {});
223+
224+ // find_last_if
225+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
226+ typename Proj = std::identity,
227+ std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
228+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
229+ std::ranges::sized_range<R>
230+ std::ranges::borrowed_subrange_t<R>
231+ find_last_if (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {});
232+
233+ // find_last_if_not
234+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
235+ typename Proj = std::identity,
236+ std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
237+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
238+ std::ranges::sized_range<R>
239+ std::ranges::borrowed_subrange_t<R>
240+ find_last_if_not (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {});
241+
201242 }
202243
203244 Minimum and Maximum
@@ -357,6 +398,40 @@ Sequence Search and Comparison
357398 std::ranges::sized_range<R1> && std::ranges::sized_range<R2>
358399 bool lexicographical_compare (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {},
359400 Proj1 proj1 = {}, Proj2 proj2 = {});
401+
402+ // contains_subrange
403+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
404+ std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
405+ typename Proj1 = std::identity, typename Proj2 = std::identity>
406+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
407+ std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
408+ std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
409+ Pred, Proj1, Proj2 >
410+ bool contains_subrange (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
411+ Proj1 proj1 = {}, Proj2 proj2 = {});
412+
413+ // starts_with
414+ template < typename ExecutionPolicy, std::ranges::random_access_range R1,
415+ std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
416+ typename Proj1 = std::identity, typename Proj2 = std::identity>
417+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
418+ std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
419+ std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
420+ Pred, Proj1, Proj2 >
421+ bool starts_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
422+ Proj1 proj1 = {}, Proj2 proj2 = {});
423+
424+ // ends_with
425+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
426+ std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
427+ typename Proj1 = std::identity, typename Proj2 = std::identity>
428+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
429+ std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
430+ std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
431+ Pred, Proj1, Proj2 >
432+ bool ends_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
433+ Proj1 proj1 = {}, Proj2 proj2 = {});
434+
360435 }
361436
362437 Sorting, Merge, and Heap Operations
0 commit comments