std::count, std::count_if
| Определено в заголовочном файле <algorithm>
|
||
template< class InputIt, class T > typename iterator_traits<InputIt>::difference_type count( InputIt first, InputIt last, const T &value ); |
(1) | |
template< class InputIt, class UnaryPredicate > typename iterator_traits<InputIt>::difference_type count_if( InputIt first, InputIt last, UnaryPredicate p ); |
(2) | |
Возвращает количество элементов в диапазоне [first, last), удовлетворяющих определенному условию. Первый вариант подсчитывает элементы, равные value, второй вариант подсчитывает элементы, для которых предикат p возвращает значение true.
Параметры
[first, last)
|
— | два итератора задающих диапазон элементов для проверки |
| value | — | искомое значение |
| p | — | унарный предикат, который возвращаетtrue для соответствующих элементов. Определение функции предиката должно быть эквивалентно следующему:
Присутствие |
| Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator.
| ||
Возвращаемое значение
Количество элементов, удовлетворяющих условию.
Сложность
Ровно last - first сравнения/применений предиката.
Возможная реализация
Пример
Следующий код использует count чтобы определить, сколько целых чисел в std::vector'е соответствует указанному значению:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int data[] = { 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 };
std::vector<int> v(data, data+10);
int target1 = 3;
int target2 = 5;
int num_items1 = std::count(v.begin(), v.end(), target1);
int num_items2 = std::count(v.begin(), v.end(), target2);
std::cout << "число: " << target1 << " количество: " << num_items1 << '\n';
std::cout << "число: " << target2 << " количество: " << num_items2 << '\n';
}
Вывод:
число: 3 количество: 2
число: 5 количество: 0
В этом примере используется лямбда-выражение для подсчёта элементов, делящихся на 3:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int data[] = { 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 };
std::vector<int> v(data, data+10);
int num_items1 = std::count_if(v.begin(), v.end(), [](int i) {return i % 3 == 0;});
std::cout << "количество чисел, делящихся на три: " << num_items1 << '\n';
}
Вывод:
количество чисел, делящихся на три: 3
