std::all_of
#include <algorithm>
template <class InputIterator, class UnaryPredicate>
bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred);
Kiểm tra xem liệu tất cả các phần tử trong một phạm vi (range) có thỏa mãn một điều kiện cụ thể hay không. Điều kiện này đượ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 kiểm tra.
last
- Input Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi cần kiểm tra. Lưu ý rằng 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ề
true
- Nếu tất cả các phần tử trong phạm vi
[first, last)
đều thỏa mãn điều kiện được chỉ định bởi hàm vị từpred
, hoặc nếu phạm vi rỗng (empty range).
false
- Nếu có ít nhất một phần tử trong phạm vi không thỏa mãn điều kiện.
Đặc điểm
all_of()
sẽ dừng kiểm tra ngay khi tìm thấy phần tử đầu tiên không thỏa mãn điều kiện. Nó không nhất thiết phải duyệt qua toàn bộ phạm vi.- Phạm vi
[first, last)
là "nửa mở", nghĩa là không bao gồm phần tửlast
. all_of()
thường được sử dụng để kiểm tra một tính chất chung cho tất cả các phần tử trong một container (như vector, array, list, ...).
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> numbers1 = {2, 4, 6, 8, 10};
std::vector<int> numbers2 = {2, 4, 7, 8, 10};
// Sử dụng con trỏ hàm
if (std::all_of(numbers1.begin(), numbers1.end(), isEven)) {
std::cout << "All elements in numbers1 are even.\n";
} else {
std::cout << "Not all elements in numbers1 are even.\n";
}
// Sử dụng biểu thức lambda
if (std::all_of(numbers2.begin(), numbers2.end(), [](int i){ return (i % 2) == 0; })) {
std::cout << "All elements in numbers2 are even.\n";
} else {
std::cout << "Not all elements in numbers2 are even.\n";
}
// Kiểm tra một vector rỗng
std::vector<int> empty_vector;
if (std::all_of(empty_vector.begin(), empty_vector.end(), isEven)) {
std::cout << "Empty vector satisfies the condition (all elements are even).\n";
}
return 0;
}
Các hàm liên quan
any_of | Kiểm tra xem liệu có ít nhất một phần tử trong một phạm vi thỏa mãn một điều kiện cụ thể hay không |
none_of | Kiểm tra xem liệu không có phần tử nào trong một phạm vi thỏa mãn một điều kiện cụ thể hay không |
find_if | Tìm kiếm phần tử đầu tiên trong một phạm vi thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ |