std::experimental::ranges:: find_end
|
template
<
ForwardIterator I1, Sentinel
<
I1
>
S1, ForwardIterator I2, Sentinel
<
I2
>
S2,
class
Proj
=
ranges::
identity
,
|
(1) | (ranges TS) |
|
template
<
ForwardRange R1, ForwardRange R2,
class
Proj
=
ranges::
identity
,
IndirectRelation
<
ranges::
iterator_t
<
R2
>
,
|
(2) | (ranges TS) |
[
first1
,
last1
)
中搜索序列
[
first2
,
last2
)
的最后一次出现(经
proj
投影处理后)。
尽管存在上述声明,算法声明的实际模板参数数量和顺序是未指定的。因此,若在调用算法时使用了显式模板参数,该程序很可能不具备可移植性。
目录 |
参数
| first1, last1 | - | 要检查的元素范围 |
| r1 | - | 要检查的元素范围 |
| first2, last2 | - | 要搜索的元素范围 |
| r2 | - | 要搜索的元素范围 |
| pred | - | 用于比较元素的谓词 |
| proj | - | 应用于第一个范围元素的投影 |
返回值
指向范围
[
first1
,
last1
)
中最后一个出现的序列
[
first2
,
last2
)
起始位置的迭代器(经过
proj
投影处理后)。
如果
[
first2
,
last2
)
为空范围或未找到匹配序列,则返回与
last1
相等的迭代器。
复杂度
最多需要
S * (N - S + 1)
次谓词和投影的调用,其中
S
=
last2
-
first2
且
N
=
last1
-
first1
。
注释
投影仅应用于范围
[
first1
,
last1
)
。
可能实现
template<ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Proj = ranges::identity, IndirectRelation<I2, projected<I1, Proj>> Pred = ranges::equal_to<>> I1 find_end(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{}, Proj proj = Proj{}) { I1 result = ranges::next(first1, last1); if (first2 == last2) return result; while (true) { I1 new_result = ranges::search(first1, last1, first2, last2, pred, proj); if (new_result == last1) break; else { result = new_result; first1 = result; ++first1; } } return result; } |
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
在特定范围内查找元素的最后序列
(函数模板) |
|
|
搜索元素范围
(函数模板) |
|
|
若一个集合是另一个集合的子集则返回
true
(函数模板) |
|
|
查找首个相邻的相等元素(或满足给定谓词的元素)
(函数模板) |
|
|
查找首个满足特定条件的元素
(函数模板) |
|
|
搜索一组元素中的任意一个
(函数模板) |
|
|
在范围内搜索连续重复指定次数的元素
(函数模板) |