# count(3C++)

**count --
count the elements of an array that satisfy a given criterion
**

## Synopsis

#include <stddef.h>
template<class T>
ptrdiff_t count(
const T& val,
const T* b,
const T* e
);
template <class T>
ptrdiff_t count_r(
int (*rel)(const T*,const T*),
const T& val,
const T* b,
const T* e
);
template <class T>
ptrdiff_t count_p(
int (*pred)(const T*),
const T* b,
const T* e
);

## Assumptions

(1) For the plain version, **T::operator==** defines an equivalence
relation on **T**.

(2) For the relational version, **rel** defines an equivalence
relation on **T**.

## Description

These functions count elements that satisfy some criterion.

template <class T>
ptrdiff_t count(
const T& val,
const T* b,
const T* e
);

Counts elements equal to **val**, as determined by
**T::operator==**.

template <class T>
ptrdiff_t count_r(
int (*rel)(const T*,const T*),
const T& val,
const T* b,
const T* e
);

Like **count**, but uses **rel** to test
for equality. That is, if
**p** is a pointer into the array, then ***p** is
counted if **rel(p,&val)==0**.

template <class T>
ptrdiff_t count_p(
int (*pred)(const T*),
const T* b,
const T* e
);

Counts elements that satisfy the predicate. That is, if
**p** is a pointer into the array, then ***p** is
counted if **pred(p)** is true.

## Complexity

If *N* is the size of the array, then complexity
is *O(N)*. Exactly *N* tests
of the relation are done.

## Notes

Because a Block (see **Block(3C++)**) can always be used wherever
an array is called for, Array Algorithms can also be used with Blocks. In fact,
these two components were actually designed to be used together.

## References

Array_alg(3C++)
Block(3C++)

*
© 2004 The SCO Group, Inc. All rights reserved.
*

UnixWare 7 Release 7.1.4 - 25 April 2004