std::none_of
#include <algorithm>
template <class InputIterator, class UnaryPredicate>
bool none_of (InputIterator first, InputIterator last, UnaryPredicate pred);
Kiểm tra xem liệu không có phần tử nào trong một phạm vi (range) thỏa mãn một điều kiện cụ thể hay không. Nói cách khác, nó kiểm tra xem tất cả các phần tử trong phạm vi có không thỏa mãn điều kiện 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 không có phần tử nào trong phạm vi
[first, last)
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 thỏa mãn điều kiện.
Đặc điểm
none_of()
sẽ dừng kiểm tra ngay khi tìm thấy phần tử đầu tiên 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
. - Hàm
none_of()
có thể được coi là tương đương với phủ định củaany_of()
, nhưng sử dụngnone_of()
sẽ rõ ràng và dễ đọc code hơn trong nhiều trường hợp. none_of()
thường được sử dụng để đảm bảo rằng không có phần tử nào trong một container (như vector, array, list, ...) vi phạm một quy tắc hoặc ràng buộc cụ thể.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
// Hàm vị từ kiểm tra số âm
bool isNegative(int i) {
return i < 0;
}
int main() {
std::vector<int> numbers1 = {1, 2, 3, 4, 5};
std::vector<int> numbers2 = {1, 2, -3, 4, 5};
// Sử dụng con trỏ hàm
if (std::none_of(numbers1.begin(), numbers1.end(), isNegative)) {
std::cout << "numbers1 does not contain any negative number.\n";
} else {
std::cout << "numbers1 contains at least one negative number.\n";
}
// Sử dụng biểu thức lambda
if (std::none_of(numbers2.begin(), numbers2.end(), [](int i){ return i < 0; })) {
std::cout << "numbers2 does not contain any negative number.\n";
} else {
std::cout << "numbers2 contains at least one negative number.\n";
}
// Kiểm tra một vector rỗng
std::vector<int> empty_vector;
if (std::none_of(empty_vector.begin(), empty_vector.end(), isNegative)) {
std::cout << "Empty vector satisfies the condition (no negative numbers).\n";
}
return 0;
}
Các hàm liên quan
all_of | Kiểm tra xem liệu tất cả các phần tử trong một phạm vi có thỏa mãn một điều kiện cụ thể hay không |
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 |
find_if_not | Tìm kiếm phần tử đầu tiên trong một phạm vi không thỏa mãn một điều kiện cụ thể được xác định bởi một hàm vị từ |