std::experimental::ranges:: search_n
|
template
<
ForwardIterator I, Sentinel
<
I
>
S,
class
T,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj
=
ranges::
identity
>
|
(1) | (ranges TS) |
|
template
<
ForwardRange R,
class
T,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj
=
ranges::
identity
>
|
(2) | (ranges TS) |
[
first
,
last
)
中搜索首个由
count
个元素组成的序列,这些元素的投影值根据谓词
pred
均等于给定值
value
。
目录 |
参数
| first, last | - | 要检查的元素范围 |
| r | - | 要检查的元素范围 |
| count | - | 要搜索的序列长度 |
| value | - | 要搜索的值 |
| pred | - | 用于比较投影元素与 value 的谓词 |
| proj | - | 应用于元素的投影 |
返回值
指向在范围
[
first
,
last
)
中找到的序列起始位置的迭代器。如果未找到这样的序列,则返回与
last
相等的迭代器。
复杂度
最多 last - first 次谓词和投影函数的应用。
可能的实现
template<ForwardIterator I, Sentinel<I> S, class T, class Pred = ranges::equal_to<>, class Proj = ranges::identity> requires IndirectlyComparable<I, const T*, Pred, Proj> I search_n(I first, S last, ranges::difference_type_t<I> count, const T& value, Pred pred = Pred{}, Proj proj = Proj{}) { for (; first != last; ++first) { if (!ranges::invoke(pred, ranges::invoke(proj, *first), value)) continue; I candidate = first; ranges::difference_type_t<I> cur_count = 0; while (true) { ++cur_count; if (cur_count == count) // 成功 return candidate; ++first; if (first == last) // 已遍历完整个序列 return first; if (!ranges::invoke(pred, ranges::invoke(proj, *first), value)) // 连续匹配数量不足 break; } } return first; } |
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
在范围中搜索首个连续出现指定次数的元素序列
(函数模板) |
|
|
在特定范围中查找最后出现的元素序列
(函数模板) |
|
|
查找首个满足特定条件的元素
(函数模板) |
|
|
搜索元素范围
(函数模板) |