std::experimental::ranges::search_n

来自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< 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{});
(1) (范围 TS)
template< ForwardRange R, class T, class Pred =ranges::equal_to<>,

          class Proj =ranges::identity>
    requires IndirectlyComparable<ranges::iterator_t<R>, const T*, Pred, Proj>
ranges::safe_iterator_t<R> search_n( R&& r,
                                     ranges::difference_type_t<ranges::iterator_t<R>> count,

                                     const T& value, Pred pred = Pred{}, Proj proj = Proj{});
(2) (范围 TS)
1) 搜索范围 [firstlast) 中首个 count 元素序列,其投射后的值根据谓词 pred 均等于给定值 value
2)(1) 相同,但用 r 为源范围,如同以 ranges::begin(r)first 并以 ranges::end(r)last

目录

[编辑]参数

first, last - 要检验的元素范围
r - 要检验的元素范围
count - 要搜索的序列长度
value - 要搜索的值
pred - 比较投射后元素和 value 的谓词
proj - 运用于元素的投射

[编辑]返回值

指向范围 [firstlast) 中找到的序列的开头的迭代器。如果未找到这种序列,则返回与 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;}

[编辑]示例

[编辑]参阅

搜索元素在范围中首次连续若干次出现
(函数模板)[编辑]
在特定范围中寻找最后出现的元素序列
(函数模板)[编辑]
寻找首个满足特定判别标准的元素
(函数模板)[编辑]
搜索一个元素范围
(函数模板)[编辑]
close