std::count_if
#include <algorithm>
template <class InputIterator, class UnaryPredicate>
typename iterator_traits<InputIterator>::difference_type
count_if (InputIterator first, InputIterator last, UnaryPredicate pred);
Đếm số lượng phần tử trong một phạm vi (range) thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ (predicate).
Tham số
first
- Input Iterator trỏ đến phần tử đầu tiên trong phạm vi cần đếm.
last
- Input Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi cần đếm. Phạm vi bao gồm từ
first
đếnlast
nhưng không bao gồmlast
([first, last)
).
pred
- Một hàm vị từ (unary predicate) nhận một đối số là phần tử trong phạm vi và trả về true nếu phần tử thỏa mãn điều kiện, false nếu không. Đây có thể là:
- Con trỏ hàm (function pointer)
- Đối tượng hàm (function object/functor)
- Biểu thức lambda (lambda expression)
Giá trị trả về
- Số lượng phần tử trong phạm vi
[first, last)
thỏa mãn điều kiện được chỉ định bởi hàm vị từpred
. Kiểu trả về làiterator_traits<InputIterator>::difference_type
, thường là một kiểu số nguyên nhưptrdiff_t
.
Đặc điểm
count_if()
đếm tất cả các phần tử thỏa mãn điều kiện, không phân biệt vị trí.- Phạm vi
[first, last)
là "nửa mở", không bao gồm phần tửlast
. - Trong C++11 trở lên, sử dụng biểu thức lambda cho hàm vị từ
pred
thường ngắn gọn và dễ đọc hơn. count_if()
thường được sử dụng để đếm số lượng phần tử thỏa mãn một tiêu chí nào đó trong một container (như vector, array, list, ...). Ví dụ:- Đếm số lượng số chẵn trong một dãy số.
- Đếm số lượng chuỗi có độ dài lớn hơn 5 trong một danh sách chuỗi.
- Đếm số lượng học sinh có điểm số trên trung bình trong danh sách điểm.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
// Hàm vị từ kiểm tra số chẵn
bool isEven(int i) {
return (i % 2) == 0;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// Đếm số lượng số chẵn sử dụng con trỏ hàm
int evenCount = std::count_if(numbers.begin(), numbers.end(), isEven);
std::cout << "Number of even numbers: " << evenCount << std::endl;
// Đếm số lượng số lớn hơn 5 sử dụng biểu thức lambda
int greaterThan5Count = std::count_if(numbers.begin(), numbers.end(), [](int i){ return i > 5; });
std::cout << "Number of elements greater than 5: " << greaterThan5Count << std::endl;
return 0;
}
Các hàm liên quan
count | Đếm số lần xuất hiện của một giá trị cụ thể trong một phạm vi được chỉ định |
for_each | Áp dụng một hàm (hoặc đối tượng hàm) cho mỗi phần tử trong một phạm vi được chỉ định |
find | Tìm kiếm phần tử đầu tiên trong một phạm vi có giá trị bằng với một giá trị cho trước |