std::experimental::ranges:: count, std::experimental::ranges:: count_if
|
Определено в заголовке
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S,
class
T,
class
Proj
=
ranges::
identity
>
requires IndirectRelation
<
ranges::
equal_to
<>
,
projected
<
I, Proj
>
,
const
T
*
>
|
(1) | (ranges TS) |
|
template
<
InputRange R,
class
T,
class
Proj
=
ranges::
identity
>
requires IndirectRelation
<
ranges::
equal_to
<>
,
|
(2) | (ranges TS) |
|
template
<
InputIterator I, Sentinel
<
I
>
S,
class
Proj
=
ranges::
identity
,
IndirectUnaryPredicate
<
projected
<
I, Proj
>>
Pred
>
|
(3) | (ranges TS) |
|
template
<
InputRange R,
class
Proj
=
ranges::
identity
,
IndirectUnaryPredicate
<
projected
<
ranges::
iterator_t
<
R
>
, Proj
>>
Pred
>
|
(4) | (ranges TS) |
Возвращает количество элементов в диапазоне
[
first
,
last
)
удовлетворяющих определённым критериям.
Несмотря на приведенные выше объявления, фактическое количество и порядок параметров шаблона для объявлений алгоритмов не определено. Таким образом, если при вызове алгоритма используются явные аргументы шаблона, программа, вероятно, является непереносимой.
Содержание |
Параметры
| first, last | - | диапазон элементов для проверки |
| r | - | диапазон элементов для проверки |
| value | - | значение для поиска |
| pred | - | предикат, применяемый к проецируемым элементам |
| proj | - | проекция, применяемая к элементам |
Возвращаемое значение
Количество элементов, удовлетворяющих условию.
Сложность
Ровно last - first сравнений/применений предиката и столько же применений проекции.
Примечания
Для количества элементов в диапазоне
[
first
,
last
)
без дополнительных критериев, смотрите
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; } |
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
возвращает количество элементов, удовлетворяющих определённым критериям
(шаблон функции) |
|
|
возвращает расстояние между итератором и ограничителем, или между началом и концом диапазона
(шаблон функции) |