std::experimental::ranges::search_n
来自cppreference.com
< cpp | experimental | ranges
template< ForwardIterator I, Sentinel<I> S, class T, class Pred =ranges::equal_to<>, class Proj =ranges::identity> | (1) | (范围 TS) |
template< ForwardRange R, class T, class Pred =ranges::equal_to<>, class Proj =ranges::identity> | (2) | (范围 TS) |
1) 搜索范围
[
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)// successreturn candidate; ++first;if(first == last)// exhausted the listreturn first; if(!ranges::invoke(pred, ranges::invoke(proj, *first), value))// too few in a rowbreak;}}return first;} |
[编辑]示例
本节未完成 原因:暂无示例 |
[编辑]参阅
搜索元素在范围中首次连续若干次出现 (函数模板) | |
在特定范围中寻找最后出现的元素序列 (函数模板) | |
寻找首个满足特定判别标准的元素 (函数模板) | |
搜索一个元素范围 (函数模板) |