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

std::any_of

#include <algorithm>

template <class InputIterator, class UnaryPredicate>
bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred);

Kiểm tra xem liệu có ít nhất một phần tử trong một phạm vi (range) 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 đế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 có ít nhất một 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.

false

  • Nếu không có phần tử nào trong phạm vi thỏa mãn điều kiện, hoặc nếu phạm vi rỗng (empty range).

Đặc điểm

  1. any_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. any_of() thường được sử dụng để kiểm tra sự tồn tại của một phần tử thỏa mãn một tính chất nào đó trong một container (như vector, array, list, ...).

Ví dụ

#include <iostream>
#include <vector>
#include <algorithm>

// Hàm vị từ kiểm tra số lẻ
bool isOdd(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};
std::vector<int> numbers3 = {1, 3, 5, 7, 9};

// Sử dụng con trỏ hàm
if (std::any_of(numbers1.begin(), numbers1.end(), isOdd)) {
std::cout << "numbers1 contains at least one odd number.\n";
} else {
std::cout << "numbers1 does not contain any odd number.\n";
}

// Sử dụng biểu thức lambda
if (std::any_of(numbers2.begin(), numbers2.end(), [](int i){ return (i % 2) != 0; })) {
std::cout << "numbers2 contains at least one odd number.\n";
} else {
std::cout << "numbers2 does not contain any odd number.\n";
}

// Sử dụng với tất cả số đều là số lẻ
if (std::any_of(numbers3.begin(), numbers3.end(), isOdd)){
std::cout << "numbers3 contains at least one odd number.\n";
}

// Kiểm tra một vector rỗng
std::vector<int> empty_vector;
if(std::any_of(empty_vector.begin(), empty_vector.end(), isOdd)){
std::cout << "Empty vector contains at least one odd number.\n";
} else {
std::cout << "Empty vector does not contain any odd number.\n";
}
return 0;
}

Các hàm liên quan

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
none_ofKiể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_ifTì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ừ