std::count, std::count_if — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(1) | |
|
|
(2) | |
Возвращает количество элементов в диапазоне [first, last), удовлетворяющих определенному условию. Первый вариант подсчитывает элементы, равные value, второй вариант подсчитывает элементы, для которых предикат p возвращает значение true.
Параметры
[first, last)
|
— | два итератора задающих диапазон элементов для проверки |
| value | — | искомое значение |
| p | — | унарный предикат, который возвращаетtrue для соответствующих элементов.
Определение функции предиката должно быть эквивалентно следующему:
Присутствие |
| Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator.
| ||
Возвращаемое значение
Количество элементов, удовлетворяющих условию.
Сложность
Ровно last - first сравнения/применений предиката.
Возможная реализация
| Первый вариант |
|---|
template<class InputIt, class T> typename iterator_traits<InputIt>::difference_type count(InputIt first, InputIt last, const T& value) { typename iterator_traits<InputIt>::difference_type ret = 0; for (; first != last; ++first) { if (*first == value) { ret++; } } return ret; } |
| Второй вариант |
template<class InputIt, class UnaryPredicate> typename iterator_traits<InputIt>::difference_type count_if(InputIt first, InputIt last, UnaryPredicate p) { typename iterator_traits<InputIt>::difference_type ret = 0; for (; first != last; ++first) { if (p(*first)) { ret++; } } return ret; } |
Пример
Следующий код использует 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