std::experimental::ranges::count, std::experimental::ranges::count_if

来自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 I, Sentinel<I> S, class T, class Proj =ranges::identity>

    requires IndirectRelation<ranges::equal_to<>, projected<I, Proj>, const T*>

ranges::difference_type_t<I> count( I first, S last, const T& value, Proj proj = Proj{});
(1) (范围 TS)
template< InputRange R, class T, class Proj =ranges::identity>

    requires IndirectRelation<ranges::equal_to<>,
                              projected<ranges::iterator_t<R>, Proj>, const T*>
ranges::difference_type_t<ranges::iterator_t<R>>

    count( R&& r, const T& value, Proj proj = Proj{});
(2) (范围 TS)
template< InputIterator I, Sentinel<I> S, class Proj =ranges::identity,

          IndirectUnaryPredicate<projected<I, Proj>> Pred >

ranges::difference_type_t<I> count_if( I first, S last, Pred pred, Proj proj = Proj{});
(3) (范围 TS)
template< InputRange R, class Proj =ranges::identity,

          IndirectUnaryPredicate<projected<ranges::iterator_t<R>, Proj>> Pred >
ranges::difference_type_t<ranges::iterator_t<R>>

    count_if( R&& r, Pred pred, Proj proj = Proj{});
(4) (范围 TS)

返回范围 [firstlast) 中满足特定准则的元素数量。

1) 计数投射后值等于 value 的元素(即 ranges::invoke(proj, *i)== value)。
3) 计数投射后值满足谓词 pred 的元素(即 ranges::invoke(pred, ranges::invoke(proj, *i))!=false)。
2,4)(1,3) 相同,但用 r 为源范围,如同以 ranges::begin(r)first 并以 ranges::end(r)last

尽管声明描述如上,算法声明的模板形参的实际数量和顺序是未指定的。从而若在调用算法时使用显式模板实参,则程序很可能不可移植。

目录

[编辑]参数

first, last - 要检验的元素范围
r - 要检验的元素范围
value - 要搜索的值
pred - 应用于投射后元素的谓词
proj - 应用于元素的投射

[编辑]返回值

满足条件的元素数量。

[编辑]复杂度

恰好 last - first 次比较/运用谓词,和相同次数运用投射。

[编辑]注解

对于没有任何额外标准获得范围 [firstlast) 中元素数量参见 ranges::distance

[编辑]可能的实现

版本一
template<InputIterator I, Sentinel<I> S, class T, class Proj =ranges::identity> requires IndirectRelation<ranges::equal_to<>, projected<I, Proj>, const T*> ranges::difference_type_t<I> count(I first, S last, const T& value, Proj proj = Proj{}){ ranges::difference_type_t<I> ret =0;for(; first != last;++first)if(ranges::invoke(proj, *first)== value)++ret;return ret;}
版本二
template<InputIterator I, Sentinel<I> S, class Proj =ranges::identity, IndirectUnaryPredicate<projected<I, Proj>> Pred> ranges::difference_type_t<I> count_if(I first, S last, Pred pred, Proj proj = Proj{}){ ranges::difference_type_t<I> ret =0;for(; first != last;++first)if(ranges::invoke(pred, ranges::invoke(proj, *i)))++ret;return ret;}

[编辑]示例

[编辑]参阅

返回满足特定条件的元素数目
(函数模板)[编辑]
返回迭代器和哨位之间的距离,或范围起始和结尾间的距离
(函数模板)[编辑]
close