std::experimental::ranges::find_first_of

来自cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库(文件系统 TS)
库基础(库基础 TS)
库基础 2(库基础 TS v2)
库基础 3(库基础 TS v3)
并行扩展(并行 TS)
并行扩展 2(并行 TS v2)
并发扩展(并发 TS)
并发扩展 2(并发 TS v2)
概念(概念 TS)
范围(范围 TS)
反射(反射 TS)
数学特殊函数(特殊函数 TR)
实验性非 TS 功能特性
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
template< InputIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          IndirectRelation<projected<I1, Proj1>,
                           projected<I2, Proj2>> Pred =ranges::equal_to<>>
I1 find_first_of( I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{},

                  Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(1) (范围 TS)
template< InputRange R1, ForwardRange R2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          IndirectRelation<projected<ranges::iterator_t<R1>, Proj1>,
                           projected<ranges::iterator_t<R2>, Proj2>> Pred =ranges::equal_to<>>
ranges::safe_iterator_t<R1> find_first_of( R1&& r1, R2&& r2, Pred pred = Pred{},

                                           Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(2) (范围 TS)
1) 在范围 [first1last1) 中,经过以 proj1proj2 分别投射两个范围后,搜索范围 [first2last2) 中的任何元素。使用 pred 比较投射后的元素。
2)(1) 相同,但用 r1 为第一源范围并用 r2 为第二源范围,如同以 ranges::begin(r1)first1,以 ranges::end(r1)last1,以 ranges::begin(r2)first2,并以 ranges::end(r2)last2

目录

[编辑]参数

first1, last1 - 要检验的元素范围
r1 - 要检验的元素范围
first2, last2 - 要搜索的元素范围
r2 - 要搜索的元素范围
pred - 用于比较投射后元素的谓词
proj1 - 应用于第一范围中元素的投射
proj2 - 应用于第一范围中元素的投射

[编辑]返回值

指向范围 [first1last1) 中首个投射后等于范围 [first2last2) 中元素的元素的迭代器。如果未找到这种元素,则返回与 last1 比较相等的迭代器。

[编辑]复杂度

至多 (S * N) 此运用谓词和各投射,其中 S = distance(last2 - first2)N = last1 - first1

[编辑]可能的实现

template<InputIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Proj1 =ranges::identity, class Proj2 =ranges::identity, IndirectRelation<projected<I1, Proj1>, projected<I2, Proj2>> Pred =ranges::equal_to<>> I1 find_first_of(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{}){for(; first1 != last1;++first1)for(ForwardIt it = first2; it != last2;++it)if(ranges::invoke(pred, ranges::invoke(proj1, *first1), ranges::invoke(proj2, *it)))return first1;return first1;}

[编辑]示例

[编辑]参阅

搜索一组元素中任一元素
(函数模板)[编辑]
寻找首个满足特定判别标准的元素
(函数模板)[编辑]
close