Chuyển tới nội dung chính

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 đến last nhưng không bao gồm last ([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

  1. 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.
  2. Phạm vi [first, last) là "nửa mở", nghĩa là không bao gồm phần tử last.
  3. Hàm none_of() có thể được coi là tương đương với phủ định của any_of(), nhưng sử dụng none_of() sẽ rõ ràng và dễ đọc code hơn trong nhiều trường hợp.
  4. 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_ofKiể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_ofKiể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_notTì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ừ