function template
<algorithm>
std::count
template <class InputIterator, class T> typename iterator_traits<InputIterator>::difference_type count (InputIterator first, InputIterator last, const T& val);
Count appearances of value in range
Returns the number of elements in the range [first,last)
that compare equal to val.
The function uses operator==
to compare the individual elements to val.
The behavior of this function template is equivalent to:
1 2 3 4 5 6 7 8 9 10 11
|
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count (InputIterator first, InputIterator last, const T& val)
{
typename iterator_traits<InputIterator>::difference_type ret = 0;
while (first!=last) {
if (*first == val) ++ret;
++first;
}
return ret;
}
|
Parameters
- first, last
- Input iterators to the initial and final positions of the sequence of elements. The range used is
[first,last)
, which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
- val
- Value to match.
T shall be a type supporting comparisons with the elements pointed by InputIterator using operator==
(with the elements as left-hand side operands, and val as right-hand side).
Return value
The number of elements in the range [first,last)
that compare equal to val.
The return type (iterator_traits<InputIterator>::difference_type) is a signed integral type.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
// count algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::count
#include <vector> // std::vector
int main () {
// counting elements in array:
int myints[] = {10,20,30,30,20,10,10,20}; // 8 elements
int mycount = std::count (myints, myints+8, 10);
std::cout << "10 appears " << mycount << " times.\n";
// counting elements in container:
std::vector<int> myvector (myints, myints+8);
mycount = std::count (myvector.begin(), myvector.end(), 20);
std::cout << "20 appears " << mycount << " times.\n";
return 0;
}
|
Output:
10 appears 3 times.
20 appears 3 times.
|
Complexity
Linear in the distance between first and last: Compares once each element.
Data races
The objects in the range [first,last)
are accessed (each object is accessed exactly once).
Exceptions
Throws if either an element comparison or an operation on an iterator throws.
Note that invalid arguments cause undefined behavior.
See also
- for_each
- Apply function to range (function template)
- count_if
- Return number of elements in range satisfying condition (function template)
- find
- Find value in range (function template)
- replace
- Replace value in range (function template)