std::all_of
是 C++ 標準庫中的一個算法,用于檢查容器或范圍內的所有元素是否滿足給定的條件。如果所有元素都滿足條件,則函數返回 true
;否則返回 false
。
std::all_of
本身不會拋出異常,但在使用過程中,可能會遇到以下兩種異常情況:
迭代器無效:如果傳遞給 std::all_of
的迭代器無效(例如,它們不屬于同一個容器),則行為是未定義的。在這種情況下,可能會導致運行時錯誤,但不會拋出異常。為了避免這種情況,請確保傳遞給 std::all_of
的迭代器是有效的。
異常安全性:如果在調用 std::all_of
時,提供的謂詞(即檢查條件的函數)拋出異常,那么 std::all_of
將立即停止執行,并將異常傳播給調用者。為了確保代碼的異常安全性,請確保謂詞函數在可能的情況下處理異常。
以下是一個使用 std::all_of
的示例,展示了如何處理異常:
#include<iostream>
#include<vector>
#include<algorithm>
bool is_positive(int n) {
if (n < 0) {
throw std::runtime_error("Negative number found");
}
return n > 0;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
try {
bool result = std::all_of(numbers.begin(), numbers.end(), is_positive);
std::cout << "All numbers are positive: "<< std::boolalpha<< result<< std::endl;
} catch (const std::exception& e) {
std::cerr << "Exception caught: " << e.what()<< std::endl;
}
return 0;
}
在這個示例中,我們定義了一個名為 is_positive
的謂詞函數,該函數檢查一個整數是否為正數。如果整數為負數,函數將拋出一個異常。在 main
函數中,我們使用 try-catch
塊來捕獲并處理可能由 std::all_of
拋出的異常。