On this page
std::ranges::count, std::ranges::count_if
Defined in header <algorithm> |
||
---|---|---|
Call signature | ||
|
(1) | (since C++20) |
|
(2) | (since C++20) |
|
(3) | (since C++20) |
|
(4) | (since C++20) |
Returns the number of elements in the range [
first
,
last
)
satisfying specific criteria.
1) Counts the elements that are equal to
value
.
3) Counts elements for which predicate
p
returns true
.
2,4) Same as (1,3), but uses
r
as the source range, as if using ranges::begin(r)
as first
and ranges::end(r)
as last
.
The function-like entities described on this page are niebloids, that is:
- Explicit template argument lists cannot be specified when calling any of them.
- None of them are visible to argument-dependent lookup.
- When any of them are found by normal unqualified lookup as the name to the left of the function-call operator, argument-dependent lookup is inhibited.
In practice, they may be implemented as function objects, or with special compiler extensions.
Parameters
first, last | - | the range of elements to examine |
r | - | the range of the elements to examine |
value | - | the value to search for |
pred | - | predicate to apply to the projected elements |
proj | - | projection to apply to the elements |
Return value
Number of elements satisfying the condition.
Complexity
Exactly last - first
comparisons and projection.
Notes
For the number of elements in the range without any additional criteria, see std::ranges::distance
.
Possible implementation
count |
---|
|
count_if |
|
Example
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 4, 3, 7, 8, 9, 10};
namespace ranges = std::ranges;
// determine how many integers in a std::vector match a target value.
int target1 = 3;
int target2 = 5;
int num_items1 = ranges::count(v.begin(), v.end(), target1);
int num_items2 = ranges::count(v, target2);
std::cout << "number: " << target1 << " count: " << num_items1 << '\n';
std::cout << "number: " << target2 << " count: " << num_items2 << '\n';
// use a lambda expression to count elements divisible by 3.
int num_items3 = ranges::count_if(v.begin(), v.end(), [](int i){ return i % 3 == 0; });
std::cout << "number divisible by three: " << num_items3 << '\n';
// use a lambda expression to count elements divisible by 11.
int num_items11 = ranges::count_if(v, [](int i){ return i % 11 == 0; });
std::cout << "number divisible by eleven: " << num_items11 << '\n';
}
Output:
number: 3 count: 2
number: 5 count: 0
number divisible by three: 3
number divisible by eleven: 0
See also
(C++20)
|
returns the distance between an iterator and a sentinel, or between the beginning and end of a range (niebloid) |
(C++20)
|
creates a subrange from an iterator and a count (customization point object) |
(C++20)
|
a view that consists of the elements of a range that satisfies a predicate(class template) (range adaptor object) |
returns the number of elements satisfying specific criteria (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm/ranges/count