在本文中,我們將討論如何將 STL 算法 std::any_of() 與 lambda 函數和函數指針一起使用。
std::any_of 是 C++11 中引入的 STL 算法。
需要 std::any_of()
當您有一個元素范圍並且想要檢查范圍中的任何給定元素是否滿足給定條件時,此 STL 算法很有用。
std::any_of() 使用細節
std::any_of() 接受元素范圍和一元謂詞(回調)作為參數。
bool any_of ( InputIterator start, InputIterator end, UnaryPredicate callback ) ;
std::any_of() 在給定的范圍內迭代,並為每個元素調用給定的回調,即一元謂詞。如果對於任何元素,則給定的謂詞返回 true,則停止進一步迭代並返回 true,否則返回 false。
std::any_of() 示例
如何將 std::any_of() 與兩種不同類型的回調(即 Lambda 函數和函數指針)一起使用。
將 std::any_of() 與 Lambda 函數一起使用
假設我們有一個字符串向量,即
std::vector<std::string> vecOfStrs = { "Hi", "Hello", "test", "first", "second", "third", "fourth" };
現在我們要檢查這個向量是否包含任何大小為 4 的字符串。讓我們使用 std::any_of() 來做到這一點,即
/* Check if vector contains any string with size 4. */ bool result = std::any_of(vecOfStrs.begin(), vecOfStrs.end(), [](const std::string & str){ return str.size() == 4; });
std::any_of() 將遍歷 vector 中的所有字符串,並且對於 vector 中的每個字符串,它調用傳遞的 lambda 函數,該函數檢查字符串的大小是否為 4。如果對於任何字符串,則 lambda 函數返回 true,std::any_of () 將停止進一步的迭代並返回真,否則返回假。
現在檢查上面的向量是否包含任何以 char 'P' 開頭的字符串,即
/* Check if vector contains any string that starts with char 'P' */ result = std::any_of(vecOfStrs.begin(), vecOfStrs.end(), [](const std::string & str) { return str.size() > 0 && str[0] == 'P'; });
將 std::any_of() 與函數指針一起使用
假設我們有一個字符串,即
std::string str = "testString" ;
現在讓我們檢查給定的字符串是否包含所有小寫字母,即不是單個大寫字符,即
/* Check if given string contains all lower case letters i.e. not a single upper case char */ result = std::any_of(str.begin(), str.end(), ::isupper);
#include <iostream> #include <vector> #include <string> #include <algorithm> int main() { std::vector<std::string> vecOfStrs = { "Hi", "Hello", "test", "first", "second", "third", "fourth" }; /* Check if vector contains any string with size 4. */ bool result = std::any_of(vecOfStrs.begin(), vecOfStrs.end(), [](const std::string& str) { return str.size() == 4; }); std::cout << "vector contains any string with size 4 | Result = " << result << std::endl; /* Check if vector contains any string that starts with char 'P' */ result = std::any_of(vecOfStrs.begin(), vecOfStrs.end(), [](const std::string& str) { return str.size() > 0 && str[0] == 'P'; }); std::cout << "vector contains any string that starts with char 'P' | Result = " << result << std::endl; std::string str = "testString"; /* Check if given string contains all lower case letters i.e. not a single upper case char */ result = std::any_of(str.begin(), str.end(), ::isupper); std::cout << "str = " << str << std::endl; std::cout << "Check if given string contains all lower case letters | Result = " << result << std::endl; return 0; }
vector contains any string with size 4 | Result = 1 vector contains any string that starts with char 'P' | Result = 0 str = testString Check if given string contains all lower case letters | Result = 1
